我怎样才能让外面的区域无法点亮?

时间:2015-05-22 21:12:10

标签: python python-3.x tkinter toplevel

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

1 个答案:

答案 0 :(得分:5)

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

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

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

本地抓取是tkinter如何实现模态对话框 - 当对话框打开时,它具有本地抓取功能,因此您必须在单击主窗口中的按钮之前关闭对话框。

Danger Will Robinson!如果您正在进行全球争夺,请确保释放抓斗绝对万无一失。例如,在开发期间,您可以使用after在15秒后释放抓取。或者,绑定到转义键。始终,始终先用本地抓斗进行测试。但是,根据经验,除非绝对必要,否则应避免使用全局抓取。