【问题标题】:Can't remove tkinter root window无法删除 tkinter 根窗口
【发布时间】:2018-11-16 23:17:47
【问题描述】:

编辑: 我意识到这个问题是模棱两可的并且被错误地问到了,所以我试图简化。

由于未正确销毁窗口,我在尝试使用 tkinter 应用程序执行多个 ploop 时遇到了麻烦。我的修复(我很确定这是不正确的)是创建一个整数循环,并将我的类嵌套在其中:

for i in range(1, 1000):

if i >= 2:
    root.destroy()

class App(tkinter.Frame): *app code here*

退出应用程序:

def OnButtonClick2(self):

        i = -1
        app.destroy()
        root.destroy()
        sys.exit()

否则:

i+=1

由于某种原因,如果我在第一次迭代后指示应用程序销毁,它会留下一个空白的根窗口,然后当再次创建应用程序时,按钮将无法点击并嵌套在不同的窗口中。这解决了问题,但我知道这不是正确的解决方案。

【问题讨论】:

  • 我不是反对者,但我当然可以理解为什么有人会反对你并没有真正解释你的问题是什么,也没有解释它在你的代码中的位置。您已经展示了很多代码(这肯定比没有代码好,但不如少量代码好)。请尝试将其缩小为minimal reproducible example,即可以证明问题的最小代码量。并解释这个问题是什么,这样我们就可以在我们开始阅读代码之前了解你正在尝试做什么以及你是如何遇到麻烦的!
  • 扩展@Blckknght 的答案,您实际上是在尝试重新启动 tkinter 应用程序。该应用程序实际所做的与该问题完全无关。您可以只保留最低限度的“hello world”应用程序,尝试重新启动它,然后告诉我们您的努力。然后,我们可以为您指明正确的方向。我希望您不要期望我们中的任何人自愿阅读 156 行代码并为您调试您的应用程序。
  • @roeen30 我当然不知道,感谢您的意见。我试图在 init 之前放置一个 call 函数,但我认为我写的不正确。我对术语不满意,而且我还是新手,所以我不太知道如何解释我还尝试过什么。我也刚刚尝试在 mail.Display(True) 之后直接引用一个实例,以便当电子邮件窗口消失时它会继续。那也没有用。请查看我的编辑,让我知道这是否更可接受。
  • @Blckknght 感谢您的意见。请查看修改。
  • 这更好,但我仍然对发生的事情不够了解。第二个代码示例在哪里适合 tkinter 应用程序?此外,请发布您迄今为止尝试过的所有代码。

标签: python loops class tkinter


【解决方案1】:

要么将您希望重复的逻辑安排为类方法,要么将所有内容放在 if __name__ == '__main__' 的函数中。无论是方法还是函数,循环调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2010-10-07
    • 2018-05-29
    • 2020-11-08
    • 2016-01-04
    相关资源
    最近更新 更多