似乎调用此方法的对象等待作为参数传递的窗口在继续其自己的循环之前被销毁 ...
从Misc
类的文档字符串中,我们可以观察到:
def wait_window(self, window=None): """Wait until a WIDGET is destroyed. If no parameter is given self is used."""
乍一看,这个方法似乎可以制作一个Toplevel
模态,但事实并非如此。要创建一个 Toplevel
模态,我们必须使用 grab_set()
方法。
我看到了其他的解释:
wait_window
seems to not return until the given widget passed as parameter is not destroyed.
来自另一个地方:
wait_window(widget)
- Creates a local event that waits for the given widget to be destroyed. This loop doesn't affect the application's mainloop.
来自effbot文档,我们有:
The
wait_window
enters a local event loop, and doesn’t return until the given window is destroyed (either via the destroy method, or explicitly via the window manager):widget.wait_window(window)
window
等待 window
(本身)的确切含义是什么?
似乎调用wait_window
之后的代码不会执行,直到传递给相同方法的窗口未被销毁。
在下面的工作示例中,我们可以看到刚才所说的证明:
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!”
仅当名为 dialog
的本地 Toplevel
小部件被销毁时才会打印。
那么,到底在什么实际情况下应该使用这种方法呢?
最佳答案
如文档所述,它会一直等到给定的窗口被销毁。它主要用于模态弹出窗口,尽管它本身并不使窗口模态。在目标窗口被销毁之前,对该函数的调用不会返回。要制作模式窗口,您还必须进行抓取。
最常见的用途是创建 Toplevel 的一个实例,用小部件填充该窗口,然后在执行其他操作之前等待窗口被关闭。在等待期间,tkinter 能够继续正常处理事件。
例如,您可以禁用(或延迟创建)主 GUI,弹出“服务条款”通知,并等待用户确认服务条款、版权、许可等。一旦窗口被销毁后,您可以完成初始化,或启用一些小部件等。
标准文件对话框就是一个完美的例子:弹出对话框,然后代码等待用户选择文件,然后使用返回的文件名。在内部,对话框的实现使用 wait_window
以便在对话框被关闭之前它不会返回。
关于python - “wait_window”方法有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388346/