python - “wait_window”方法有什么作用?

标签 python python-3.x dialog tkinter

似乎调用此方法的对象等待作为参数传递的窗口在继续其自己的循环之前被销毁 ...

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/

相关文章:

Python:将字典转换为字节

python - 在 python 中将应用程序与逻辑和相对导入分离

Python - 导入错误 : No module named 'requests'

c# - 在 C# 中使用多个表单

c++ - CPropertyPage::OnOK 中的数据交换完成了吗?

python - asio 无法将消息写入服务器两次以上

python - 如何将 numpy ndarray 值转换为概率值

python - 配对嵌套列表中的元素

python - 为什么 lib pyttsx3 中的listen.listen 命令会打印这个额外的文本?

windows - 如何确定对话框窗口中使用的字体