繁体   English   中英

在Python Tkinter中创建模态对话框需要wait_window()吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM