第一个Python Tkinter窗口可以工作,但其余的都是空白的

时间:2010-10-15 19:48:19

标签: python tkinter

我想我错过了一些关于Tkinter的基本知识。

使用相同的隐藏根窗口创建多个窗口的正确方法是什么?我可以打开一个窗口,但一旦关闭,后续的窗口显示空白,其中没有任何小部件。我还注意到,如果我看到根窗口可见,当我关闭第一个“真实”窗口时,它会消失。

我会发布代码,但我无法弄清楚导致这种行为的原因,而且我的实际代码相当复杂,并且必须在另一个(甚至更复杂的)程序中运行。

我尝试使用.quit().destroy()关闭窗口,并将mainloop()wait_window()循环放在不同的位置,但所有内容仍然有错误或更坏的事情出了问题。我想我正在寻找的只是一个不同的视角。

我的问题似乎与here类似,但我无法从答案中获得任何新内容。

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

解决: 这可能对任何人都无济于事,但我想出了问题所在。我有几类窗口,每个窗口都来自Tkinter.Toplevel。在我的基础Window课程中,我创建了一个close()函数,调用self.destroy()。然后在它的子类中我添加了自定义代码来存储它们的几何等,最后调用Window.close(self)。关于那个的东西不起作用,因为如果我只使用self.quit()而不是调用超类的close(),一切都很好。

1 个答案:

答案 0 :(得分:2)

您的问题太模糊,无法确定问题所在。请放心,当您正确使用它时,可以很容易地创建多个窗口,并随意隐藏和显示它们。

你问创建多个窗口的正确方法是什么;答案就是为每个窗口调用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()