Was macht die Methode "wait_window"?
Es scheint, dass das Objekt, das diese Methode aufruftwartet, bis das als Parameter übergebene Fenster zerstört ist, bevor mit der eigenen Schleife fortgefahren wird ...
Aus den Dokumentzeichenfolgen desMisc
Klasse können wir beobachten:
def wait_window(self, window=None):
"""Wait until a WIDGET is destroyed.
If no parameter is given self is used."""
uf den ersten Blick sieht es so aus, als ob diese Methode ein @ erzeugen kanToplevel
modal, aber das stimmt nicht. Ein ... machenToplevel
modal, wir müssen das @ verwendgrab_set()
Methode
Ich habe mich um andere Erklärungen gekümmert:
wait_window
scheint nicht zurückzukehren, bis das angegebene Widget, das als Parameter übergeben wurde, nicht zerstört wird.
Von einem anderen Ort:
wait_window(widget)
- Erstellt ein lokales Ereignis, das darauf wartet, dass das angegebene Widget zerstört wird. Diese Schleife wirkt sich nicht auf die Hauptschleife der Anwendung aus.
Von dem effbot Dokumentation, wir haben:
Daswait_window
tritt in eine lokale Ereignisschleife ein und kehrt erst zurück, wenn das angegebene Fenster zerstört wurde (entweder über die destroy-Methode oder explizit über den Fenstermanager):
widget.wait_window(window)
Was genau bedeutet für einwindow
warten aufwindow
(selbst)?
Es scheint, dass der Code, der nach dem Aufruf von @ komwait_window
wird erst ausgeführt, wenn das an dieselbe Methode übergebene Fenster nicht zerstört wird. Im folgenden Arbeitsbeispiel sehen wir einen Beweis für das, was gerade gesagt wurde:
from tkinter import *
def on_win_request(parent):
dialog = Toplevel()
parent.wait_window(dialog)
# executed only when "dialog" is destroyed
print("Mini-event loop finished!")
r = Tk()
b = Button(r, text='New Window', command=lambda: on_win_request(r))
b.pack()
b2 = Button(r, text='Hello!', command=lambda: print("hello"))
b2.pack()
r.mainloop()
"Mini-event loop finished!"
wird nur gedruckt, wenn das lokaleToplevel
Widget namensdialog
ist zerstört
Also, unter welchen realen Umständen sollte ich diese Methode anwenden?