tkinter 事件与绑定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tkinter 事件与绑定相关的知识,希望对你有一定的参考价值。

参考技术A

tkinter 使用 <modifier-type-detail> 用于描述事件。

字段是事件说明符中最重要的部分。它指定了我们希望绑定的事件类型,可以是诸如 Button Key 之类的用户操作,也可以是诸如 Enter Configure 等其他窗口管理器事件。 和 字段用于提供其他信息,在许多情况下可以省略。还有多种方法可以简化事件字符串。例如,要匹配键盘键,您可以省去尖括号(除非是空格或尖括号不可省略),而只需按原样使用键即可。

下面讨论一些常见的事件。

Button 1 是最左边的(leftmost)按钮, Button 2 是中间按钮(如果有), Button 3 是最右边的按钮。当您在小部件上按下鼠标按钮时,tkinter 将自动“抓住”(grab)鼠标指针(the mouse pointer),随后即使将鼠标移到当前窗口小部件之外,只要按住鼠标按钮,随后的鼠标事件(例如,Motion 和 Release 事件)就会发送到当前小部件。鼠标指针的当前位置(相对于小部件)由传递给回调的事件对象的 x y 成员变量提供。( <Button-1> = <ButtonPress-1> = <1> )。

下表列出常见的几个事件:

看一个例子:

实际上,您可以在四个不同级别上创建绑定:

还可以使用 Protocols 绑定事件。最常用的 protocol 称为 WM_DELETE_WINDOW ,用于定义当用户使用窗口管理器显式关闭窗口时发生的情况。

您可以使用 protocol 方法来为此协议安装处理程序(小部件必须是根或 Toplevel 插件):

一旦安装了自己的处理程序,tkinter 将不再自动关闭窗口。相反,您可以显示一个消息框,询问用户是否应保存当前数据,或者在某些情况下,只需忽略请求即可。要从此处理程序关闭窗口,只需调用窗口的 destroy 方法:

实际上,您可以在四个不同级别上创建绑定:

例如,您可以使用 bind_all 为 F1 键创建一个绑定,因此您可以在应用程序的任何地方提供帮助。但是,如果您为同一个键创建多个绑定,或者提供重叠的绑定,会发生什么呢?

首先,在这四个级别中的每个级别上,tkinter 都会选择可用绑定的“最匹配”。 例如,如果您为 <Key> 和 <Return> 事件创建实例绑定,则在按下 Enter 键时将仅调用第二个绑定。

但是,如果将 <Return> 绑定添加到顶级窗口小部件,则两个绑定都将被调用。tkinter 首先在实例级别调用最佳绑定,然后在顶级窗口级别调用最佳绑定,然后在类级别调用最佳绑定(通常是标准绑定),最后在应用程序级别调用最佳可用绑定。因此,在极端情况下,单个事件可能会调用四个事件处理程序。

除了事件绑定,tkinter 还支持一种称为协议处理程序(protocol handlers)的机制。在这里,术语协议(protocol)是指应用程序和窗口管理器之间的交互。最常用的协议称为 WM_DELETE_WINDOW ,用于定义当用户使用窗口管理器显式关闭窗口时发生的情况。

您可以使用协议方法来为此协议安装处理程序(小部件必须是 root 或者 Toplevel 小部件):

一旦安装了自己的处理程序,tkinter 将不再自动关闭窗口。相反,您可以例如显示一个消息框,询问用户是否应保存当前数据,或者在某些情况下,只需忽略请求即可。 要从此处理程序关闭窗口,只需调用窗口的 destroy 方法。

请注意,即使您没有在顶级窗口上注册 WM_DELETE_WINDOW 的处理程序,该窗口本身也将像往常一样被销毁(以可控的方式,不同于 X)。但是,从Python 1.5.2开始,Tkinter不会破坏相应的小部件实例层次结构,因此始终自己注册一个处理程序是一个好主意:

tkinter之事件绑定

 

以上是关于tkinter 事件与绑定的主要内容,如果未能解决你的问题,请参考以下文章

[Tkinter 教程15] event 事件绑定

python tkinter中的事件绑定

如何将点击事件绑定到 Tkinter 中的画布? [关闭]

Tkinter 如何绑定Text内容改变事件?

tkinter之事件绑定

2 TKinter绑定事件