tkinter winfo_screenwidth() when used with dual monitors
Solution 1
It is an old question, but still: for a cross-platform solution, you could try the screeninfo module, and get information about every monitor with:
import screeninfo
screeninfo.get_monitors()
If you need to know on which monitor one of your windows is located, you could use:
def get_monitor_from_coord(x, y):
monitors = screeninfo.get_monitors()
for m in reversed(monitors):
if m.x <= x <= m.width + m.x and m.y <= y <= m.height + m.y:
return m
return monitors[0]
# Get the screen which contains top
current_screen = get_monitor_from_coord(top.winfo_x(), top.winfo_y())
# Get the monitor's size
print current_screen.width, current_screen.height
(where top is your Tk root)
Solution 2
Based on this slightly different question, I would suggest the following:
t.state('zoomed')
m_1_height= t.winfo_height()
m_1_width= t.winfo_width() #this is the width you need for monitor 1
That way the window will zoom to fill one screen. The other monitor's width is just wininfo_screenwidth()-m_1_width
I also would point you to the excellent ctypes method of finding monitor sizes for windows found here. NOTE: unlike the post says, ctypes is in stdlib! No need to install anything.
Karpov
Updated on June 09, 2022Comments
-
Karpov almost 2 years
With tkinter canvas, to calculate the size of the graphics I display, I normally use the function
winfo_screenwidth()
, and size my objects accordingly. But when used on a system with two monitors,winfo_screenwidth()
returns the combined width of both monitors -- which messes up my graphics. How can I find out the screen width in pixels of each monitor, separately?I have had this problem with several versions of Python 3.x and several versions of tkinter (all 8.5 or above) on a variety of Linux machines (Ubuntu and Mint).
For example, the first monitor is 1440 pixels wide. The second is 1980 pixels wide.
winfo_screenwidth()
returns 3360.I need to find a way to determine the screenwidth for each monitor independently.
Thanks!