与双显示器

时间:2015-05-18 21:10:22

标签: python tkinter tkinter-canvas

使用tkinter canvas,要计算我显示的图形的大小,我通常使用函数winfo_screenwidth(),并相应地调整我的对象的大小。 但是当在具有两个监视器的系统上使用时,winfo_screenwidth()将返回两个监视器的组合宽度 - 这会混淆我的图形。 如何分别找出每个显示器的屏幕宽度(以像素为单位)?

我在各种Linux机器(Ubuntu和Mint)上使用了几个版本的Python 3.x和几个版本的tkinter(全部8.5或更高版本)。

例如,第一台显示器的宽度为1440像素。第二个是1980像素宽。 winfo_screenwidth()返回3360。

我需要找到一种方法来独立确定每个显示器的屏幕宽度。

谢谢!

2 个答案:

答案 0 :(得分:1)

这是一个古老的问题,但是仍然:对于跨平台解决方案,您可以尝试使用screeninfo模块,并通过以下方式获取有关每个监视器的信息:

import screeninfo
screeninfo.get_monitors()

如果您需要知道一个窗口位于哪台显示器上,可以使用:

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

(顶部是您的Tk根)

答案 1 :(得分:0)

基于this slightly different question,我建议如下:

 t.state('zoomed')
 m_1_height= t.winfo_height()
 m_1_width= t.winfo_width() #this is the width you need for monitor 1 

这样窗口将缩放以填充一个屏幕。另一台显示器的宽度仅为wininfo_screenwidth()-m_1_width

我还会指出一种优秀的ctypes方法来查找找到的here窗口的监视器大小。注意:与帖子说的不同,ctypes在stdlib中!无需安装任何东西。