第一个Python Tkinter窗口正常,但其他窗口都是空白
我觉得我对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()