用户界面-如何使用Python和Tkinter创建任意数量的窗口



我正在编写一个没有主窗口的应用程序(它在另一个应用程序的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当然允许任意数量的顶层窗口,但你的问题似乎没有足够的细节来显示什么是错误的,除非我的第一个猜测是正确的。

相关内容

  • 没有找到相关文章

最新更新