0

我有一个烦人的小问题,所以我来找你,看看你能不能帮忙解决。我在 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.iconify() 替换 root.withdraw( ) 窗口的大小被正确地重新调整了,但令人惊讶的是,最后没有去图标化!!!

我对此有点迷失......

4

2 回答 2

1

最后在 kalgasnik 的输入下,我有一个工作代码

# main window
root = tk.Tk()
# hide the main window during time we insert widgets
root.withdraw()

root.title('My application')
# create the objects in the main window with .grid()
w = buildWidgetClass(root)
# size of the screen (monitor resolution)
screenWi = root.winfo_screenwidth()
screenHe = root.winfo_screenheight()
# now that widgets are created, find the width and the height
root.update()
# retrieve the requested size which is different as the current size
guiWi = root.winfo_reqwidth()
guiHe = root.winfo_reqheight()
# position of the window
x = (screenWi - guiWi) / 2
y = (screenHe - guiHe) / 2
root.geometry("%dx%d+%d+%d" % (guiWi, guiHe, x, y))
# restore the window
root.deiconify()

非常感谢你们俩的时间和帮助

于 2013-04-23T11:30:19.787 回答
1

使用root.winfo_reqwidth而不是root.winfo_width可能对您的情况有所帮助。

于 2013-04-22T21:29:01.703 回答