如何高效居中Tkinter窗口?解决创建时的偏移问题
解决Tkinter窗口偏移无法居中的问题
最简修复方案
针对你遇到的tk::PlaceWindow仅定位窗口左上角的问题,只需调整命令的目标对象,就能让整个窗口完美居中,代码量极少:
from tkinter import * def newWind(bPressed): newApp = Toplevel() # 用Toplevel创建子窗口,不要重复创建Tk()主窗口 newApp.title(bPressed) newApp.geometry('1920x1080') # 关键修复:指定当前窗口的路径名,而非默认根窗口 newApp.eval(f'tk::PlaceWindow {newApp._w} center') # 修正按钮的写法,补充必要参数 button = Button(text="打开新窗口", command=lambda: newWind("测试窗口")) button.pack() mainloop()
问题根源说明
- 你之前用的
.eval('tk::PlaceWindow . center')中,.代表Tkinter的根窗口(第一个创建的Tk()实例),而非你新创建的newApp窗口,所以只会把根窗口的左上角定位到中心,而非目标窗口。 - 重复调用
tk.Tk()创建多个主窗口会打乱Tkinter的窗口管理逻辑,这也是出现10像素偏移的潜在原因,改用Toplevel()创建子窗口是更规范的做法。
替代方案(手动计算)
如果偏好手动计算的方式,也可以用一行代码实现居中,无需硬编码尺寸:
newApp.geometry(f"+{(newApp.winfo_screenwidth()-newApp.winfo_reqwidth())//2}+{(newApp.winfo_screenheight()-newApp.winfo_reqheight())//2}")
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

