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 kanToplevelmodal, 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage