【问题标题】:How can I make area outside toplevel unclickable?如何使顶层以外的区域不可点击?
【发布时间】:2015-08-05 00:32:02
【问题描述】:

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

【问题讨论】:

  • 你想要一个模态对话框吗?

标签: python python-3.x tkinter toplevel


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2020-03-24
    • 1970-01-01
    • 2012-01-09
    • 2011-08-28
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多