This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Tkinter scaling does not work on some linux systems
Type: behavior Stage: resolved
Components: Tkinter Versions: Python 3.9, Python 3.8, Python 3.7
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: aunderscored, serhiy.storchaka
Priority: normal Keywords:

Created on 2021-04-01 11:33 by aunderscored, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
Screenshot_20210401_132045.png aunderscored, 2021-04-01 11:33 Image of broken scaling
Messages (9)
msg389975 - (view) Author: A_D (aunderscored) Date: 2021-04-01 11:33
When using scaling (as in root.tk.call('scaling', somenum)), some linux systems appear to simply disregard the change. 

I recently reinstalled from Ubuntu to OpenSUSE Tumbleweed and found that scaling straight up did not work in the application I tried or the test application -- https://github.com/Athanasius/tk-scaling. (image attached)

Tested on python 3.8.8 and 3.9.2 (pyenv)
msg389985 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2021-04-01 14:07
From "man font":

FONT OPTIONS

       -size size
              The desired size of the font.  If the size argument is  a  posi‐
              tive  number, it is interpreted as a size in points.  If size is
              a negative number, its absolute value is interpreted as  a  size
              in pixels.  If a font cannot be displayed at the specified size,
              a nearby size will be chosen.  If size is unspecified or zero, a
              platform-dependent default size will be chosen.

              Sizes  should normally be specified in points so the application
              will remain the same ruler size on the screen, even when  chang‐
              ing screen resolutions or moving scripts across platforms.  How‐
              ever, specifying pixels is useful in certain circumstances  such
              as  when  a  piece of text must line up with respect to a fixed-
              size bitmap.  The mapping between points and pixels is set  when
              the  application  starts,  based  on properties of the installed
              monitor, but it can be overridden by calling the tk scaling com‐
              mand.

If the font size is specified in absolute pixels the scaling factor does not affect it.

See fix_scaling() in Lib/idlelib/run.py for example how to handle this problem.
msg389987 - (view) Author: A_D (aunderscored) Date: 2021-04-01 14:25
I wasnt referring to fonts, I was refering to window scaling in general, which includes widgets and other things. Which are _also_ not being scaled correctly.

The example code doesnt mess with fonts at all either, which either means the default behaves in an unexpected manner, or just that as I said scaling just straight doesnt work.
msg389988 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2021-04-01 14:38
What did you expect to get?
msg389989 - (view) Author: A_D (aunderscored) Date: 2021-04-01 14:42
I'd expect the windows themselves to change size based on the percentage requested. eg as shown here https://user-images.githubusercontent.com/4589845/95577562-0a794500-0a3b-11eb-914e-9a5afc500b65.png (semirelated issue: https://github.com/EDCD/EDMarketConnector/issues/750 )
msg389990 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2021-04-01 15:00
The size of of the window is determined by the size of its components. The size of the label and the munu is determined by the size of the font. If font has the same size and you output the same string (or string containing characters of the same proportion) you will get windows with the same size.
msg389998 - (view) Author: A_D (aunderscored) Date: 2021-04-01 16:16
Okay that makes sense to me. But then my next question is, why does this work on some linux systems and not others without having a specified font? 

Something funky about the font size? because I'd expect the platform defaults to at least be the same on different linux systems.
msg390005 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2021-04-01 18:26
AFAIK X Window uses two font systems: for bitmap fonts and for scalable fonts. If default fonts on your system are bitmap fonts, they are not scaled.
msg390009 - (view) Author: A_D (aunderscored) Date: 2021-04-01 19:25
Thanks so much for your help. To anyone in the future trying to figure this out: Apparently the default opensuse fonts (which are noto) are _not_ scalable. In my testing the following is enough to solve the issue.

```
tk.font.nametofont('TkDefaultFont').configure(family='DejaVu Sans', size=10)
```
History
Date User Action Args
2022-04-11 14:59:43adminsetgithub: 87860
2021-04-01 19:25:26aunderscoredsetmessages: + msg390009
2021-04-01 18:26:21serhiy.storchakasetstatus: open -> closed
resolution: not a bug
messages: + msg390005

stage: resolved
2021-04-01 16:16:44aunderscoredsetmessages: + msg389998
2021-04-01 15:00:00serhiy.storchakasetmessages: + msg389990
2021-04-01 14:42:40aunderscoredsetmessages: + msg389989
2021-04-01 14:38:06serhiy.storchakasetmessages: + msg389988
2021-04-01 14:25:08aunderscoredsetmessages: + msg389987
2021-04-01 14:07:30serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg389985
2021-04-01 11:33:52aunderscoredcreate