python tkinter Toplevel .destroy()vs .quit()无法正常工作

时间:2014-09-28 15:30:53

标签: python tkinter destroy quit

我有class Duplicates检查40个字以内的重复项。

我有class Window创建并运行主窗口,我发布结果。

我有一个class popWindow,在询问用户如何处理可能的双重内容时会创建一个Toplevel窗口。

我的问题是在提交选项后关闭popWindow

我实际运行的版本并发布一个aswer(带有标记重复的文本)使用quit来终止窗口(意味着弹出窗口仍在那里)或者只是有多个弹出窗口,直到你完成。 / p>

class Duplicates:

    def markWord(self):
        self.appendMarkedWord(self.word)
        self.checked.append(self.word)
        self.pop.topLevel_exit()
        return ""

class popUpWindow:

    temp = Button( self, font    = 8,
                         text    = "Allowed this run only",
                         command = app.newFile.markWord
                         )
    temp.place( x = 178,
                y = 55
                )

如果我改为使用.destroy()窗口关闭,但程序停止运行,那就更糟了。

我如何解决此问题,以便关闭窗口但仍然继续运行程序?

好的,经过许多小时后,似乎真正的问题是destroy()没有停止我的popUpWindow.mainloop()所以我现在已经改变了我的退出代码,先做quit()然后再做destroy()。这不是我所看到的例子,在我看来,toplevel mainloop上的destroy()不会终止它(destroy()在我的root.mainloop上工作正常)。

def topLevel_exit(self):
    self.pop.quit()
    self.pop.destroy()

4 个答案:

答案 0 :(得分:3)

如果在顶层窗口上调用destroy(),则不会停止应用程序运行。如果您的申请停止,您的代码必须有更多内容告诉我们您的申请。毫无疑问,摆脱弹出窗口的正确方法是在destroy的实例上调用Toplevel

答案 1 :(得分:0)

隐藏窗口并保持程序运行的方法是在窗口上使用.withdraw(),并.reiconify()将其取回(如果需要)。或者您可以在.destroy()窗口中使用Toplevel。如果您需要示例,请询问,希望这对您有所帮助。

答案 2 :(得分:0)

我的解决方案是:

def topLevel_exit(self):
    self.top.quit()
    self.top.destroy()

我不知道这是否是普通的实践,但是我必须要做的事情因为毁灭并没有阻止我的top.mainloop()

答案 3 :(得分:0)

如果使用topLevel窗口,self.pop.destroy()应该仍然可以正常使用mainloop() 否则请使用quit()或两者,但在我看来,我更喜欢destroy()