Python Tkinter如何调整x,y默认0,0坐标
Python Tkinter how to adjust the x,y default 0,0 coordinates
我一直在学习一些基本的 tkinter,我遇到了将 window 置于显示器中间的简单代码,除非我 运行 它是水平关闭的。这很迂腐,但让我很困扰。
我使用的代码
# Imports
from tkinter import *
# tkinter Application
root = Tk()
#Root Geometry
root_Width = 600
root_Length = 600
# Coordinates of top left pixel of application for centred
x_left = int(root.winfo_screenwidth()/2-root_Width/2)
y_top = int(root.winfo_screenheight()/2-root_Length/2)
root_Pos = "+" + str(x_left) + "+" + str(y_top)
# Window size and position
root.geometry(str(root_Width) + "x" + str(root_Length) + root_Pos)
root.mainloop()
即使我比较基础,只是尝试在 0,0 处打开一个 window 我的显示器大小 (1920x1080),它也水平错位了 8px。
from tkinter import *
root = Tk()
root.geometry("1920x1080+0+0")
root.mainloop()
结果我截图了:
我有一个双显示器设置,所以我在右显示器开始的地方添加了一条红线。我不知道问题是什么或如何解决。如果我把它改成,
root.geometry("1920x1080+-8+0")
它会在它应该打开的地方打开,但我想最好从总体上解决这个问题。我希望 0,0 成为显示器左上角的像素。我承认问题可能与 python 无关,但任何建议都会有所帮助。
好的,您缺少两件事。首先,在您的第一个示例中,您需要确保 tkinter 获得正确的值,为此您必须在任何 winfo
.
之前使用 update_idletasks()
方法
第二件事,解释了为什么你必须使用 -8
使全屏居中 window,是 tkinter 寡妇有外框。您可以通过检查 window (winfo_rootx()
) 和外框 (winfo_x()
) 的左上角坐标来确定此框架的大小。现在框架宽度是两者之间的差异:frame_width = root.winfo_rootx() - root.winfo_x()
而真正的 window 宽度是 real_width = root.winfo_width() + (2*frame_width)
,因为你必须考虑两侧的框架。
总而言之,要使 window 水平居中,您需要:
width = root.winfo_width()
frame_width = root.winfo_rootx() - root.winfo_x()
real_width = root.winfo_width() + (2*frame_width)
x = root.winfo_screenwidth() // 2 - real_width // 2
(这里可以打印frame width,你会看到是8
)
然后使用geometry
方法将window放在位置x
。
当然你也可以对垂直对齐做同样的事情
我一直在学习一些基本的 tkinter,我遇到了将 window 置于显示器中间的简单代码,除非我 运行 它是水平关闭的。这很迂腐,但让我很困扰。 我使用的代码
# Imports
from tkinter import *
# tkinter Application
root = Tk()
#Root Geometry
root_Width = 600
root_Length = 600
# Coordinates of top left pixel of application for centred
x_left = int(root.winfo_screenwidth()/2-root_Width/2)
y_top = int(root.winfo_screenheight()/2-root_Length/2)
root_Pos = "+" + str(x_left) + "+" + str(y_top)
# Window size and position
root.geometry(str(root_Width) + "x" + str(root_Length) + root_Pos)
root.mainloop()
即使我比较基础,只是尝试在 0,0 处打开一个 window 我的显示器大小 (1920x1080),它也水平错位了 8px。
from tkinter import *
root = Tk()
root.geometry("1920x1080+0+0")
root.mainloop()
结果我截图了:
我有一个双显示器设置,所以我在右显示器开始的地方添加了一条红线。我不知道问题是什么或如何解决。如果我把它改成,
root.geometry("1920x1080+-8+0")
它会在它应该打开的地方打开,但我想最好从总体上解决这个问题。我希望 0,0 成为显示器左上角的像素。我承认问题可能与 python 无关,但任何建议都会有所帮助。
好的,您缺少两件事。首先,在您的第一个示例中,您需要确保 tkinter 获得正确的值,为此您必须在任何 winfo
.
update_idletasks()
方法
第二件事,解释了为什么你必须使用 -8
使全屏居中 window,是 tkinter 寡妇有外框。您可以通过检查 window (winfo_rootx()
) 和外框 (winfo_x()
) 的左上角坐标来确定此框架的大小。现在框架宽度是两者之间的差异:frame_width = root.winfo_rootx() - root.winfo_x()
而真正的 window 宽度是 real_width = root.winfo_width() + (2*frame_width)
,因为你必须考虑两侧的框架。
总而言之,要使 window 水平居中,您需要:
width = root.winfo_width()
frame_width = root.winfo_rootx() - root.winfo_x()
real_width = root.winfo_width() + (2*frame_width)
x = root.winfo_screenwidth() // 2 - real_width // 2
(这里可以打印frame width,你会看到是8
)
然后使用geometry
方法将window放在位置x
。
当然你也可以对垂直对齐做同样的事情