我有一個python程序,我在其中創建了幾個自定義模態窗口,它們是頂級tkinter窗口的子項。下面是一個這樣的窗口的例子,但我有其他更復雜的窗口。我想做什麼,但不能確定如何,有一個地方,我稱之爲等待迴應。我試過類似下面的東西,它無法創建窗口如何在繼續使用tkinter之前等待模態窗口的響應?
modal = ModalWindow(tk.Tk(), 'Title', 'Text')
while modal.choice is None:
pass
if modal.choice == 'Yes':
# Do Something
什麼是處理這種類型的東西的適當方式?
自定義模式窗口實例
class ModalWindow(object):
def __init__(self, root, title, text):
self.choice = None
# Setup the window
self.modalWindow = tk.Toplevel(root)
self.modalWindow.title(title)
self.modalWindow.resizable(False, False)
# Setup the widgets in the window
label = ttk.Label(self.modalWindow, text = text, font = '-size 10')
label.grid(row = 0, column = 0, columnspan = 2, padx = 2, pady = 2)
but = ttk.Button(self.modalWindow, text = 'Yes', command = self.choiceYes)
but.grid(row = 1, column = 0, sticky = 'nsew', padx = 2, pady = 5)
but = ttk.Button(self.modalWindow, text = 'No', command = self.choiceNo)
but.grid(row = 1, column = 1, sticky = 'nsew', padx = 2, pady = 5)
self.modalWindow.rowconfigure(1, minsize = 40)
def choiceYes(self):
self.choice = 'Yes'
self.modalWindow.destroy()
def choiceNo(self):
self.choice = 'No'
self.modalWindow.destroy()
但事情是,你不是。使用我寫的Modal Window類,它將GUI引入它自己的線程,GUI等待,但調用它的代碼繼續執行。問題來自於while循環剛剛導致GUI不完全出現的事實。運行代碼,你會看到。 – zephyr