簡體   English   中英

python tkinter Toplevel .destroy()和.quit()無法按預期工作

[英]python tkinter Toplevel .destroy() vs .quit() not working as intended

我有一個class Duplicates ,用於檢查40個字以內的重復項。

我有一個class Window ,它創建並運行我在其中發布結果的主窗口。

我有一個class popWindow ,當問用戶如何處理可能的double時會創建一個class popWindow窗口。

我的問題是,一旦popWindow選擇,就會關閉popWindow

我實際運行並發布一個Aswer的版本(帶有重復標記的文本)使用quit終止窗口(意味着彈出窗口仍然存在)或簡單地具有多個彈出窗口,直到完成。

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()。 這根本不是我所看到的示例,在我看來,頂層mainloop上的destroy()並沒有終止它(destroy()在root.mainloop上運行良好)。

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

如果在頂級窗口上調用destroy() ,它將不會停止應用程序的運行。 如果您的應用程序停止了,那么您的代碼中肯定還有更多您要告訴我們的內容。 毫無疑問,擺脫彈出窗口的正確方法是在Toplevel實例上調用destroy

隱藏窗口並保持程序運行的一種方法是在窗口上使用.withdraw() ,然后使用.reiconify()將其取回(如果需要)。 或者你可以使用.destroy()一個上Toplevel窗口。 如果您只需要問一些例子,希望對您有所幫助。

我的解決方案是:

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

我不知道這是否是常見的做法,但是我必須做的是因為destroy並沒有停止我的top.mainloop()

如果您使用topLevel窗口,則self.pop.destroy()仍應與使用mainloop()時一樣工作,否則請使用quit()或同時使用這兩者,但我認為所有這些我都希望使用destroy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM