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

标签 python python-3.x tkinter toplevel

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

最佳答案

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

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

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

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

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

关于python - 如何使顶层以外的区域不可点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30405944/

相关文章:

python - 在 macOS 上编辑 PYTHONPATH

python - 使用 2 列来标识行的查找表

python - 如何将输出输入到 tkinter 输入字段中

python - 我们可以在 tkinter 中嵌套两个 OptionMenu 小部件吗?

python - 通过python mechanize上传文件

python - 我可以使用python VLC流式传输文件吗?

Python - 在末尾格式化整数

python-3.x - 在 OS X 中运行 Python 3 Turtle 时出现奇怪的终结者错误

python - 列表构造中的元组拆包(python3)

python - 将一堆代码变成循环Python