[英]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.