使用tkinter canvas,要计算我显示的图形的大小,我通常使用函数winfo_screenwidth()
,并相应地调整我的对象的大小。
但是当在具有两个监视器的系统上使用时,winfo_screenwidth()
将返回两个监视器的组合宽度 - 这会混淆我的图形。
如何分别找出每个显示器的屏幕宽度(以像素为单位)?
我在各种Linux机器(Ubuntu和Mint)上使用了几个版本的Python 3.x和几个版本的tkinter(全部8.5或更高版本)。
例如,第一台显示器的宽度为1440像素。第二个是1980像素宽。 winfo_screenwidth()
返回3360。
我需要找到一种方法来独立确定每个显示器的屏幕宽度。
谢谢!
答案 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中!无需安装任何东西。