Python Forum
[Tkinter] Window geometry appears different on Win and Linux
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] Window geometry appears different on Win and Linux
#1
I write my code in Windows 7 using IDLE on Python v3.67.

When I try out Tkinter code on Linux Mint 19.1, also using Idle and Python 3.67,
the GUI window of my programs always come out too small,
typically not wide enough and not long enough.

The screen resolution I use on both OS's are the same.
Is this problem normal?

I fix the problem by checking the platform and each having their own window geometry,
but it just doesn't feel right.

Example:

if sys.platform.startswith('win'):
    root.geometry('464x632')
else:
    root.geometry('517x663')
Reply
#2
Here's a class that will get the geometry for all monitors on your computer
 
# Author: Larz60+ Nov 2019

from screeninfo import get_monitors


class GetGeometry:
    def __init__(self):
        self.geometry = []

    def get_tkinter_geometry(self, percent_of_screen, xpad=None, ypad=None):
        '''
        Given percent of monitor size in floating point eg: 10 % = 10.0, calculates
        tkinter geometry for each monitor attached to computer
        requires screeninfo "pip install screeninfo"

        returns: list holding tkinter geometry strings padded with xpad and ypad
                or centered if xpad is None.
                
                None if bad pct passed
        '''

        if not isinstance(percent_of_screen, float):
            print("requires float percent eg: 10.0 for 10%")
            return

        pct = percent_of_screen / 100

        for size in get_monitors():
            cwidth = int(size.width * pct)
            cheight = int(size.height * pct)

            xoff = xpad
            yoff = ypad
            if xpad is None:
                xoff = int((size.width - cwidth) / 2)
                yoff = int((size.height - cheight) / 2)
            self.geometry.append(f"{cwidth}x{cheight}+{xoff}+{yoff}")
test function:
import GetTkGeometry


gg = GetTkGeometry.GetTkGeometry()
# padding specified 10 % of screen dimensions
gg.get_tkinter_geometry(10.0, 10, 10)
geometry = gg.geometry
print(f"\ngeometry - 10% of monitor size 10 pixel x and y padding:\n{geometry}")

# padding not specified 60 % of screen dimensions
gg.get_tkinter_geometry(60.0)
geometry = gg.geometry
print(f"\ngeometry - 60% of monitor size centered (no pading specified):\n{geometry}")
results for my system:
Output:
geometry - 10% of monitor size 10 pixel x and y padding: ['192x108+10+10'] geometry - 60% of monitor size centered (no pading specified): ['192x108+10+10', '1152x648+384+216']
Reply
#3
That's a clever piece of code Larz, thank you,
but my question was:

The screen resolution I use on both OS's are the same.
yet the geometries come out differently on Windows and Linux.
Is this problem normal?
Reply
#4
that shouldn't be the case, although there are some physical differences that might make the size appear to be different.
I don't have a windows computer, so cannot test.
is the geometry statement identical on both OS's?
Reply
#5
(Nov-25-2019, 11:38 PM)Larz60+ Wrote: that shouldn't be the case, although there are some physical differences that might make the size appear to be different.
I don't have a windows computer, so cannot test.
is the geometry statement identical on both OS's?

The first root.geometry below works on Windows.
When that geom is run on my Linux Mint setup it comes out different,
not wide enough and too short.
So I check if not Windows and the 2nd geom
is the adjustment Linux needs to make it look the same as on Windows.

53 extra pixels wide and 31 extra pixel high.

if sys.platform.startswith('win'):
    root.geometry('464x632')
else:
    root.geometry('517x663')
Reply
#6
The class that I provided will set the offset as well.
Also, your code is telling tkinter to use a different geometry if not windows, why?
(your if platform ...)
Reply
#7
It's weird. If I do not set the root.geometry and leave it to the system
the GUI comes out fine on both Windows and Linux so I have a way around it.
Thanks for trying to help, I don't think I explained the problem clearly
and I certainly didn't understand your replies, sorry about that, but think sorted now
anyway. cheers.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  function in new window (tkinter) Dale22 7 126 Yesterday, 11:28 PM
Last Post: Dale22
  Scrollable big image in a window (TKinter) Prospekteur 3 258 Sep-14-2020, 03:06 AM
Last Post: Larz60+
  Run more than one window together with tkinter SmukasPlays 1 255 Aug-24-2020, 05:00 PM
Last Post: Larz60+
  Adding an image to a tkinter window djwilson0495 2 759 Aug-23-2020, 11:07 AM
Last Post: ebolisa
  [Tkinter] calling a new window from a tkinter window neuroprogrammer 2 341 Jul-28-2020, 10:59 PM
Last Post: deanhystad
  How to display results from terminal window onto tkinter. buttercup 0 230 Jul-21-2020, 04:41 AM
Last Post: buttercup
  Tkinter: multitab window WizardMitMagi 3 532 Apr-29-2020, 02:40 PM
Last Post: deanhystad
  tkinter.TclError: bad window path name kenwatts275 3 1,611 Apr-26-2020, 08:16 PM
Last Post: kenwatts275
  Using Tkinter widgets on child window chewy1418 8 1,581 Feb-27-2020, 10:34 PM
Last Post: Marbelous
  Transfer Toplevel window entry to root window entry with TKinter HBH 0 1,362 Jan-23-2020, 09:00 PM
Last Post: HBH

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020