2

I want to create a toplevel window in tkinter, and I want the outside area unclickable. So this way, the user cannot click out from the toplevel window, just after it's been destroyed. (And also preventing to be able to create the same window from the root Tk())

4

1 回答 1

6

Tkinter 支持一种叫做“抓取”的东西。当您在窗口上抓取时,所有事件都通过小部件汇集。即使您在窗口外单击,单击也会在窗口中注册。

有两种类型的抓取:本地和全局。本地意味着抓取仅适用于您的应用程序——例如,您仍然可以单击桌面。全局抓取适用于整个计算机。这些可能非常危险,因为如果您不提供释放抓取的方法,您可能会完全锁定您的 UI。

要设置本地抓取,您可以在任何小部件上调用grab_set,所有事件都将转到该小部件。要设置全局图,请调用grab_set_global

本地抓取是 tkinter 实现模式对话框的方式——当对话框打开时,它有一个本地抓取,因此您必须在单击主窗口中的按钮之前关闭对话框。

危险威尔罗宾逊!如果您正在使用全局抓取,请确保有一种绝对万无一失的方式来释放抓取。例如,在开发过程中,您可能会after在 15 秒后释放抓取。或者,绑定到转义键。始终,始终首先使用本地抓取进行测试。但是,根据经验,除非绝对必要,否则应避免使用全局抓取。

于 2015-05-22T21:25:49.823 回答