[2.7] bpo-31500: IDLE: Scale default fonts on HiDPI displays. (GH-3639) by csabella · Pull Request #6585 · python/cpython

@csabella

@serhiy-storchaka @csabella

@csabella

I didn't backport the changes to pyshell because that code doesn't exist in 2.7.

@serhiy-storchaka

Please include also changes from #3664.

@serhiy-storchaka

And seems fix_scaling() is never called.

@csabella

Please include also changes from #3664.

I couldn't include #3664 because that code isn't present in 2.7. In configdialog, the TabbedPageSet was changed to a Notebook, which originally had a width and height. #3664 removed the width and height, but the TabbedPageSet in 2.7 never had that.

@csabella

@csabella

And seems fix_scaling() is never called.

Thanks. I couldn't backport the first call to fix_scaling() in pyshell, but I missed the second call, which should have been included. This should work now.

@serhiy-storchaka

It doesn't work because round() returns float in 2.7, but the font size option must be an integer.

  File "/home/serhiy/py/cpython2.7/Lib/idlelib/run.py", line 254, in fix_scaling
    font['size'] = round(-0.75*size)
  File "/home/serhiy/py/cpython2.7/Lib/lib-tk/tkFont.py", line 107, in __setitem__
    self.configure(**{key: value})
  File "/home/serhiy/py/cpython2.7/Lib/lib-tk/tkFont.py", line 139, in config
    *self._set(options))
_tkinter.TclError: expected integer but got "11.0"

@csabella

@csabella

It doesn't work because round() returns float in 2.7, but the font size option must be an integer.

Apologies for that. I'm not able to successfully build over the 2.7 branch, so I couldn't test this.

Update: I've finally figured out how to build 2.7! :-) I was able to call this on Ubuntu without any issues and it looked OK, but I never had the original HiDPI problem.

serhiy-storchaka

@terryjreedy

I caught the same two omissions as Serhiy did, and then saw your explanations. 2.7 does not have the 8.5 warning box in PyShell because the 8.5 requirement is new in 3.6.

@csabella

@csabella

@taleinat

Ping, @terryjreedy. ISTM this should go in (assuming it works).

@vstinner

@terryjreedy

The patch is likely needed on 2.7 for people with HiRes screens, but I am always nervous patching 2.7. A factor here is that 2.7 is built against 8.5 instead of 8.6, at least on Windows and Mac. Cheryl tested on Ubuntu. I will test on Windows. Tal, did you test on Mac? I presume Serhiy tested this on Linux with a HiRes screen and it worked fine.

@ned-deily

A factor here is that 2.7 is built against 8.5 instead of 8.6, at least on Windows and Mac.

As of 2.7.15, the default python.org installer for macOS supplies its own 8.6.8, like the current 3.x installers do. The deprecated 32-bit/64-bit installers for 2.7.15 and 3.6.x still use 8.5.x at the moment. FWIW, I haven't noticed any resolution issues on current versions of macOS when smoke testing IDLE 3.x or 2.7.x.
https://www.python.org/download/mac/tcltk/

@terryjreedy

The patch should only make a difference (improvement) if one has a high DPI screen, which makes it hard to test. Anyway, IDLE looks fine on Windows. Anyway, I will merge this now and try to remember to ask if someone has tried IDLE on Mac before 2.7.16 is released.