如何在TkInter中激活模式对话框时禁用窗口控件?

时间:2015-08-08 10:13:58

标签: python tkinter modal-dialog

我正在用TkInter编写一个Python应用程序。在某些时候,应用程序(root)会显示一个对话框(dlg,它是Toplevel)。为了使对话模态,我使用以下代码:

dlg.focus_set()
dlg.grab_set()
dlg.transient(root)
root.wait_window(dlg)

这确实取消了对话框外的“自定义”事件(如主应用程序窗口中的小部件),但它不会取消窗口管理器事件,因此例如单击主应用程序窗口会使其重新获得焦点,它可以移动,调整大小 - 甚至关闭! - “模态”对话框仍处于打开状态。

如何使对话框成为模态,以便在对话框处于活动状态时,主应用程序窗口的窗口管理器事件也会暂停?

我在Ubuntu 15.04上使用Python 3.4.3。

2 个答案:

答案 0 :(得分:0)

你可以使用root.grab_set_global(),如下例所示:

reduce()

答案 1 :(得分:0)

尝试这种方式:

dlg.focus_set()
dlg.grab_set()
dlg.transient(root)
dlg.wait_window(dlg)