【发布时间】:2013-04-23 19:30:19
【问题描述】:
我有一个烦人的小问题,所以我来找你看看你能不能帮忙解决它。 我在 Python2.7 中有以下代码:
# main window
root = tk.Tk()
root.title('My application')
# create the objects in the main window
w = buildWidgetClass(root)
# size of the screen (monitor resolution)
screenWi = root.winfo_screenwidth()
screenHe = root.winfo_screenheight()
# now that widgets are created, find the widht and the height
root.update()
guiWi = root.winfo_width()
guiHe = root.winfo_height()
# position of the window
x = screenWi / 2 - guiWi / 2
y = screenHe / 2 - guiHe / 2
root.geometry("%dx%d+%d+%d" % (guiWi, guiHe, x, y))
所以我创建了主窗口(没有任何大小)我在里面插入小部件,然后我定义结果的大小,并将它放在屏幕中间。
窗口中的小部件数量可能会有所不同,因此生成的大小!
到目前为止,一切都很好,它有效!我唯一的问题是窗口首先出现在屏幕的左上角,然后重新定位到中心。没什么大不了的,但也不是很专业。
所以我的想法是在小部件创建期间隐藏主窗口,然后在定义几何图形后使其出现。
所以在第一行之后,我添加了:
root.withdraw()
然后在最后:
root.update()
root.deiconify()
但是当窗口重新出现时,它没有被小部件重新调整大小并且大小为 1x1 ! 我尝试将 root.withdraw() 替换为 root.iconify(),窗口的大小已正确调整,但令人惊讶的是,最后并未取消图标化!! !
我对此有点迷茫......
【问题讨论】:
-
您使用什么几何管理器
buildWidgetClass?网格还是包? -
网格!为什么它很重要?
-
不是很重要,但是
place不会改变窗口的大小,而pack或grid会。 -
我明白为什么我的窗口是 1x1 并带有“撤回”。当处于“退出”状态时,窗口管理器会忽略窗口,因此不会更新!因此,即使使用“root.update”,它的大小也是 1x1,然后我用这个值定义几何图形,并且在...之后不会调整大小:-(
-
我试图在
root.update()之前添加root.deiconify()并找到窗口的大小并且它可以工作......但我回到开头,窗口出现在顶角然后在中心移动。一定要通过ssh试试看是不是真的像我想象的那么丑……