Bottom Page

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')
Quote
#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']
Quote
#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?
Quote
#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?
Quote
#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')
Quote
#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 ...)
Quote
#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.
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  Using Tkinter widgets on child window chewy1418 8 414 Feb-27-2020, 10:34 PM
Last Post: Marbelous
  Transfer Toplevel window entry to root window entry with TKinter HBH 0 926 Jan-23-2020, 09:00 PM
Last Post: HBH
  [Tkinter] Mouse click event not working on multiple tkinter window evrydaywannabe 2 447 Dec-16-2019, 04:47 AM
Last Post: woooee
  tkinter window and turtle window error 1885 3 637 Nov-02-2019, 12:18 PM
Last Post: 1885
  [Tkinter] Extrakt a Variable from a closed tkinter window hWp 5 574 Aug-23-2019, 09:01 PM
Last Post: woooee
  [Tkinter] Tkinter window pop up again when i click button Orimura_Sandy 1 911 May-12-2019, 08:17 PM
Last Post: joe_momma
  [Tkinter] Top Level Window - from tkinter import * francisco_neves2020 6 781 Apr-23-2019, 09:27 PM
Last Post: francisco_neves2020
  tkinter- adding a new window after clicking a button built on the gui ShashankDS 2 2,243 Apr-18-2019, 12:48 PM
Last Post: ShashankDS
  [Tkinter] Tkinter window minimize,appear frequency 5 3,199 Dec-28-2018, 02:02 PM
Last Post: frequency
  [Tkinter] Tkinter window issue frequency 4 825 Dec-24-2018, 10:49 AM
Last Post: frequency

Forum Jump:


Users browsing this thread: 1 Guest(s)