Ich habe ein Python-Programm, in dem ich ein paar benutzerdefinierte modale Fenster erstellt habe, die Kinder eines Top-Tkinter-Fensters sind. Ein Beispiel für ein solches Fenster ist unten, aber ich habe andere, kompliziertere. Was ich tun möchte, aber nicht bestimmen kann, ist, irgendwo zu haben, dass ich das nenne und auf eine Antwort warte. Ich habe versucht, etwas wie unten, es schafft nicht das FensterWie warte ich auf die Antwort vom modalen Fenster, bevor ich tkinter weiter benutze?
modal = ModalWindow(tk.Tk(), 'Title', 'Text')
while modal.choice is None:
pass
if modal.choice == 'Yes':
# Do Something
Was ist der richtige Weg, um diese Art von Sache zu behandeln?
Benutzerdefinierte Modal Fenster Beispiel
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()
Aber die Sache ist, du bist nicht. Mit der Modal Window-Klasse, die ich geschrieben habe, bringt es die GUI, es ist ein eigener Thread, und diese GUI wartet, aber der Code, der sie aufgerufen hat, wird weiterhin ausgeführt. Das Problem rührt von der Tatsache her, dass die while-Schleife direkt danach dazu führt, dass die GUI nicht vollständig auftaucht. Führen Sie den Code selbst aus und Sie werden sehen. – zephyr