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

How can I make area outside toplevel unclickable?

我想在 tkinter 中创建一个顶层 window,我希望外部区域不可点击。这样一来,用户就无法在顶层 window 被销毁后点击退出。 (并且还防止能够从根 Tk() 创建相同的 window)

Tkinter 支持一种叫做 "grab" 的东西。当您抓住 window 时,所有事件都通过小部件汇集。即使您在 window 之外单击,单击也会注册到 window。

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

要设置本地抓取,您可以调用 grab_set on any widget, and all events will go to that widget. To set a global graph, call grab_set_global

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

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