第一个Python Tkinter窗口正常,但其他窗口都是空白

1 投票
1 回答
2086 浏览
提问于 2025-04-16 05:33

我觉得我对Tkinter的一些基本知识还不太明白。

我想知道怎么才能用同一个隐藏的根窗口创建多个窗口。我能打开一个窗口,但一旦关闭后,后面的窗口就会变成空白,里面没有任何控件。我还注意到,如果我让根窗口可见,当我关闭第一个“真实”的窗口时,根窗口也会消失。

我本来想发代码的,但我还没搞清楚是什么导致了这个问题,而且我的实际代码比较复杂,还得在另一个(更复杂的)程序里运行。

我试过用.quit().destroy()来关闭窗口,也在不同的地方放了mainloop()wait_window()循环,但要么还是有错误,要么出现更糟糕的问题。我想我需要的是换个角度来看这个问题。

我的问题似乎和这里的情况类似,但我从那个答案里没有得到新的启发。

有没有什么想法?我知道这有点模糊。谢谢

解决了: 这可能对别人没什么帮助,但我找到了问题所在。我有几个窗口类,都是从Tkinter.Toplevel派生的。在我的基础Window类里,我做了一个close()函数,调用self.destroy()。然后在它的子类里,我添加了自定义代码来存储它们的几何形状等,最后调用Window.close(self)。但这样似乎不太管用,因为如果我直接用self.quit()而不是调用父类的close(),一切就正常了。

1 个回答

3

你的问题有点模糊,没法确定具体是什么问题。不过放心,当你正确使用的时候,创建多个窗口其实很简单,而且可以随意隐藏和显示它们。

你问创建多个窗口的正确方法是什么;答案就是对每个窗口调用 Toplevel(),就这么简单。之后你需要把小部件放到那个窗口里。没有什么秘密,没有隐藏的选项,也没有额外的命令。只要确保每个子小部件的父级设置正确就可以了。

下面是一个简单的例子:

import Tkinter as tk
import sys

def exit():
    sys.exit(0)

root = tk.Tk()
root.wm_withdraw()
for i in range (10):
    top = tk.Toplevel(root)
    top.title("Window %s" % i)
    label = tk.Label(top, text="This is toplevel #%s" % i)
    button = tk.Button(top, text="exit", command=exit)
    label.pack()
    button.pack()

root.mainloop()

撰写回答