如何使顶层以外的区域不可点击? - python

我想在tkinter中创建一个顶层窗口,并且希望外部区域不可单击。因此,以这种方式,用户无法在顶级窗口被销毁后立即单击它。 (并且还阻止能够从根Tk()创建相同的窗口)

python大神给出的解决方案

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

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

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

tkinter实施模态对话框的方式为本地抓取-对话框打开时,它具有本地抓取,因此您必须先关闭对话框,然后再单击主窗口中的按钮。

危险威尔·鲁滨逊!如果您正在使用全局抓斗,请确保有一种绝对安全的方法来释放抓斗。例如,在开发过程中,您可以使用after在15秒后释放抓斗。或者,绑定到转义键。始终要始终先进行本地抓取测试。根据经验,除非绝对必要,否则应避免使用全局争用。