[英]Is wait_window() required for creating a modal dialog in Python Tkinter?
我尝试使用Python Tkinter创建一个模态对话框。 我发现使用和不使用wait_window()之间没有区别。
import tkinter as tk
def button_click():
dlg = tk.Toplevel(master=window)
tk.Button(dlg, text="Dismiss", command=dlg.destroy).pack()
dlg.transient(window) # only one window in the task bar
dlg.grab_set() # modal
#window.wait_window(dlg) # why?
window = tk.Tk()
tk.Button(window, text="Click Me", command=button_click).pack()
window.mainloop()
我已经看到了一些使用wait_window()来创建模态对话框的例子。 所以我不确定是否需要该函数来创建模态对话框。
我正在使用Python 3.5。
严格来说,不, wait_window()
来创建模态对话框。 对话模态的作用是你放在窗口上的抓取。
但是,通常,一旦窗口被破坏,您可能需要运行一些其他代码。 您可以使用wait_window()
来实现此目的,因为它会在继续之前等待窗口被销毁。 然后,您可以在此之后获得代码,例如return
语句或一些清理代码。 在你的情况下,没有什么可做的,所以你不需要调用wait_window
。
使用window.wait_window(dlg)
运行代码不会改变任何内容,因为dlg.grab_set()
已经创建了一个模态对话框。 这只意味着当dlg
还活着时你无法关闭window
。 你不能关闭窗口,因为模态对话框从window
抓取所有鼠标事件并将它们重定向到null
。
如果你想创建一个没有grab_set()
的模态对话框,你需要将所有鼠标事件绑定到一个处理程序,然后决定是允许还是解除它们并使用wait_window
。
由于模式对话框定义为“对话框之外的任何内容, 并且在我的应用程序中可以单击” == False ,您已经只有使用grab_set()
的模式对话框。
如果您的应用程序无法以编程方式关闭window
,那么您还需要wait_window()
。
希望我把一切都搞清楚了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.