Skip to content

Commit

Permalink
pythongh-119174: Fix high DPI causes turtledemo(turtle-graphics examp…
Browse files Browse the repository at this point in the history
…les) windows blurry (python#119175)

------
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
  • Loading branch information
Wulian233 authored May 21, 2024
1 parent 1726902 commit 538ed5e
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 11 deletions.
3 changes: 2 additions & 1 deletion Lib/idlelib/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,9 @@ def __init__(self, _utest=False):
self.defaultCfg = {}
self.userCfg = {}
self.cfg = {} # TODO use to select userCfg vs defaultCfg

# See https://bugs.python.org/issue4630#msg356516 for following.
# self.blink_off_time = <first editor text>['insertofftime']
# See https://bugs.python.org/issue4630#msg356516.

if not _utest:
self.CreateConfigHandlers()
Expand Down
10 changes: 2 additions & 8 deletions Lib/idlelib/pyshell.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,9 @@
"Your Python may not be configured for Tk. **", file=sys.__stderr__)
raise SystemExit(1)

# Valid arguments for the ...Awareness call below are defined in the following.
# https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx
if sys.platform == 'win32':
try:
import ctypes
PROCESS_SYSTEM_DPI_AWARE = 1 # Int required.
ctypes.OleDLL('shcore').SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE)
except (ImportError, AttributeError, OSError):
pass
from idlelib.util import fix_win_hidpi
fix_win_hidpi()

from tkinter import messagebox

Expand Down
15 changes: 15 additions & 0 deletions Lib/idlelib/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,26 @@
* std streams (pyshell, run),
* warning stuff (pyshell, run).
"""
import sys

# .pyw is for Windows; .pyi is for typing stub files.
# The extension order is needed for iomenu open/save dialogs.
py_extensions = ('.py', '.pyw', '.pyi')


# Fix for HiDPI screens on Windows. CALL BEFORE ANY TK OPERATIONS!
# URL for arguments for the ...Awareness call below.
# https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx
if sys.platform == 'win32': # pragma: no cover
def fix_win_hidpi(): # Called in pyshell and turtledemo.
try:
import ctypes
PROCESS_SYSTEM_DPI_AWARE = 1 # Int required.
ctypes.OleDLL('shcore').SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE)
except (ImportError, AttributeError, OSError):
pass


if __name__ == '__main__':
from unittest import main
main('idlelib.idle_test.test_util', verbosity=2)
6 changes: 4 additions & 2 deletions Lib/turtledemo/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,15 @@
from idlelib.colorizer import ColorDelegator, color_config
from idlelib.percolator import Percolator
from idlelib.textview import view_text
import turtle
from turtledemo import __doc__ as about_turtledemo

import turtle
if sys.platform == 'win32':
from idlelib.util import fix_win_hidpi
fix_win_hidpi()

demo_dir = os.path.dirname(os.path.abspath(__file__))
darwin = sys.platform == 'darwin'

STARTUP = 1
READY = 2
RUNNING = 3
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix high DPI causes turtledemo(turtle-graphics examples) windows blurry
Patch by Wulian233 and Terry Jan Reedy

0 comments on commit 538ed5e

Please sign in to comment.