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

当然你也可以对垂直对齐做同样的事情