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
  tkinter window and turtle window error 1885 3 222 Nov-02-2019, 12:18 PM
Last Post: 1885
  [Tkinter] Extrakt a Variable from a closed tkinter window hWp 5 333 Aug-23-2019, 09:01 PM
Last Post: woooee
  [Tkinter] Tkinter window pop up again when i click button Orimura_Sandy 1 633 May-12-2019, 08:17 PM
Last Post: joe_momma
  [Tkinter] Top Level Window - from tkinter import * francisco_neves2020 6 591 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 996 Apr-18-2019, 12:48 PM
Last Post: ShashankDS
  [Tkinter] Tkinter window minimize,appear frequency 5 2,093 Dec-28-2018, 02:02 PM
Last Post: frequency
  [Tkinter] Tkinter window issue frequency 4 684 Dec-24-2018, 10:49 AM
Last Post: frequency
  Grid geometry doesnt work as expected Sigmiami 3 894 Oct-25-2018, 04:56 PM
Last Post: The_Raven
  Not understanding the correlation between code and geometry with Tkninter Intelligent_Agent0 3 587 Aug-04-2018, 08:22 AM
Last Post: Axel_Erfurt
  Python, Tkinter, can only view partial GUI when called from another window Philia 1 915 Jul-17-2018, 06:38 PM
Last Post: woooee

Forum Jump:


Users browsing this thread: 1 Guest(s)