我正在编写一个没有主窗口的应用程序(它在另一个应用程序的Python解释器中运行),我认为我有一个很好的解决方案来让Tkinter合作——我把Tkinter.Tk
类变成了Borg。
class RootWindow(Tk):
""" Invisible window that serves as the default parent
of all others.
"""
groupDict = {}
def __init__(self):
self.__dict__ = self.groupDict
if self.__dict__ == {}: # first instance
Tk.__init__(self)
self.withdraw()
之前然后我有我的Window
s,从Tkinter.Toplevel
子类,默认为parent=RootWindow()
。结果应该是我可以创建任意数量的Window
,并且它们将使用相同的根。
对于第一个Window
,它曾经工作得很好,但在那之后,事情变得一团糟。(
看到图片
我做错了什么?这是一个可行的解决方案吗?
感谢编辑:我应该补充说,即使有其他的东西在图片中运行,这个问题可以通过使用RootWindow
作为Tkinter.Toplevel
的父级来复制。
编辑:我覆盖了Window.mainloop
,所以一切都使用RootWindow
事件循环。
def mainloop(self):
self.master.wait_window(self)
然后我像这样创建每个可见窗口:
test = Window()
test.mainloop()
这似乎是工作的,因为窗口确实显示,但他们的内容以一种奇怪的方式包装,很难描述。它在完全没有内容和所有内容水平压缩并垂直展开之间交替。
一个问题似乎是您忘记启动事件循环。或者,根据您的问题的进一步编辑,您可能会启动多个主循环。你只需要一个从根窗口运行的主循环。
Tkinter当然允许任意数量的顶层窗口,但你的问题似乎没有足够的细节来显示什么是错误的,除非我的第一个猜测是正确的。