Python Tkinter 中的绑定方法

2025年3月17日 | 阅读 14 分钟

在以下教程中,我们将讨论 Python 编程语言中 Tkinter 使用的绑定概念。但在开始此主题之前,我们必须记住 Python 的 Tkinter 包用于设计基于图形用户界面 (GUI) 的接口。Tkinter 拥有广泛的内置功能和扩展,可用于提高应用程序的整体性能和功能。

理解绑定

绑定”一词的基本定义是粘在一起或使其粘在一起形成一个整体。同样,Tkinter 的 bind() 方法用于将小部件中传递的事件与事件处理程序连接起来。事件处理程序是在事件发生时调用的函数。

现在让我们考虑 Tkinter 的 bind() 方法的语法

语法

sequence 参数描述了我们期望的事件,而 func 参数用于定义当该事件发生到小部件时要调用的函数。如果该小部件已经存在该事件的绑定,则旧的回调将被 func 替换;但是,我们可以通过传递 add = '+' 来保留两个回调。

我们可以借助 bind() 方法在不同级别将事件绑定到事件处理程序。

  1. 实例级绑定
  2. 类级绑定
  3. 应用级绑定

实例级绑定

我们可以将事件绑定到特定的小部件。为了绑定小部件的事件,我们将在该小部件上调用 bind() 方法。

语法

参数

  1. event: event 参数用于定义由用户引起并可能反映更改的事件。
  2. event_handler: event_handler 参数用于描述应用程序中每当事件发生时都会调用的函数。
  3. bind: bind 方法将配置一个事件处理程序(Python 函数),该函数在事件发生到小部件时调用。

让我们考虑以下示例,说明如何将事件绑定到小部件的特定实例。

示例

输出

-
A Key has been Pressed.
A Key has been Pressed.
A Key has been Pressed.
A Key has been Pressed.
A Key has been Pressed.
A Key has been Pressed.

说明

在上述代码片段中,我们导入了 tkinter 模块。然后,我们定义了类 DisplayWindow() 来构建 GUI。在该类中,我们定义了一个初始化函数来设计主窗口。我们调用了 Tk() 类来创建一个空窗口。我们使用 geometry() 方法配置了窗口的大小和位置,并借助 title() 方法设置了其标题。然后,我们使用 Entry() 小部件创建了一个输入字段,并使用 bind() 方法将按键事件绑定到事件处理函数。然后,我们借助 pack() 方法以及 y 坐标填充 20 来定位输入字段。然后,我们调用了 mainloop() 方法来显示窗口。然后,我们定义了一个事件处理函数 on_key_press()。我们在此函数中使用了 print() 方法来在每次按键时打印一条消息。最后,我们实例化了 DisplayWindow() 类。

结果是,当我们运行代码时,屏幕上会出现一个带有输入字段的窗口。此外,当我们在输入字段中键入“welcome”时,命令提示符中会打印消息“A Key has been Pressed.”七次,表示已按下七次按键。

理解多重绑定概念

如果我们需要将多个函数绑定到特定的小部件怎么办?传递包含 bind() 方法的两个语句肯定不起作用,因为第二个语句将覆盖第一个语句;因此,只会调用第二个函数,如以下示例所示

示例

输出

作为 GUI

Binding Method in Python Tkinter

在命令提示符中

说明

在上述代码片段中,我们导入了 tkinter 模块。然后,我们定义了类 DisplayWindow() 来构建 GUI。在该类中,我们定义了一个初始化函数来设计主窗口。我们调用了 Tk() 类来创建一个空窗口。我们使用 geometry() 方法配置了窗口的大小和位置,并借助 title() 方法设置了其标题。然后,我们使用 Entry() 小部件创建了一个输入字段,并两次使用 bind() 方法将回车键按下事件绑定到两个不同的事件处理函数。然后,我们借助 pack() 方法以及 y 坐标填充 20 来定位输入字段。然后,我们调用了 mainloop() 方法来显示窗口。然后,我们定义了一个事件处理函数 on_first_return()。我们在此函数中使用了 print() 方法来在每次按回车键时打印一条消息。同样,我们定义了另一个事件处理函数 on_second_return() 来在两次按回车键时返回一条消息。最后,我们实例化了 DisplayWindow() 类。

结果是,当我们运行代码时,屏幕上会出现一个带有输入字段的窗口。此外,当我们在输入字段中键入“welcome”并按下“回车”键时,命令提示符中会打印消息“The Return Key has been pressed twice.”。

我们可以通过在第二个使用 bind() 方法的语句中插入一个额外的参数“add”来解决此问题。此外,不要忘记将“add = "+"”赋值。此方法将调用这两个函数。因此,我们可以在 Tkinter 中启用多重绑定。

让我们考虑上面语句的以下实现。

示例

输出

作为 GUI

Binding Method in Python Tkinter

在命令提示符中

说明

在上述代码片段中,我们导入了 tkinter 模块。然后,我们定义了类 DisplayWindow() 来构建 GUI。在该类中,我们定义了一个初始化函数来设计主窗口。我们调用了 Tk() 类来创建一个空窗口。我们使用 geometry() 方法配置了窗口的大小和位置,并借助 title() 方法设置了其标题。然后,我们使用 Entry() 小部件创建了一个输入字段,并两次使用 bind() 方法将回车键按下事件绑定到两个不同的事件处理函数。在第二个 bind() 方法中,我们包含了设置为“+”的 add 参数。然后,我们借助 pack() 方法以及 y 坐标填充 20 来定位输入字段。然后,我们调用了 mainloop() 方法来显示窗口。然后,我们定义了一个事件处理函数 on_first_return()。我们在此函数中使用了 print() 方法来在每次按回车键时打印一条消息。同样,我们定义了另一个事件处理函数 on_second_return() 来在两次按回车键时返回一条消息。最后,我们实例化了 DisplayWindow() 类。

结果是,当我们运行代码时,屏幕上会出现一个带有输入字段的窗口。此外,当我们在输入字段中键入“welcome”并按下“回车”键时,两个函数都正常运行,并在命令提示符中打印出各自的语句。

类级绑定

我们可以将事件绑定到类的所有小部件。例如,我们可以设置所有按钮小部件以响应鼠标中键单击,通过在法语和西班牙语标签之间来回切换。我们可以通过在任何小部件上调用 bind_class() 方法来将事件绑定到类的所有小部件。

bind_class() 方法中提到的“class”一词指的是 Tkinter 库使用的内部类的名称,而不是 python 类名。bind_class() 方法可用于所有小部件,并用于再次调用 Tkinter 绑定命令,但使用小部件类的名称。

以下是 bind_class() 方法的语法

语法

bind_class() 方法的基本工作原理与 bind() 方法相同。

例如,我们有一些相同类的小部件和多个输入小部件,并且我们需要将它们全部设置为相同的函数。与其为每个小部件调用 bind() 方法,我们可以简单地通过一次调用来设置它们,如以下代码片段所示。

示例

输出

作为 GUI

Binding Method in Python Tkinter

在命令提示符中

说明

在上述代码片段中,我们导入了 tkinter 模块。然后,我们定义了类 DisplayWindow() 来构建 GUI。在该类中,我们定义了一个初始化函数来设计主窗口。我们调用了 Tk() 类来创建一个空窗口。我们使用 geometry() 方法配置了窗口的大小和位置,并借助 title() 方法设置了其标题。然后,我们使用 Label() 小部件创建了一些标签,以向用户显示信息。然后,我们使用 Entry() 小部件创建了一个输入字段,并使用 bind_class() 方法将输入字段类的回车键按下事件绑定到事件处理函数。然后,我们借助 grid() 方法定位了标签和输入字段。然后,我们调用了 mainloop() 方法来显示窗口。然后,我们定义了一个事件处理函数 on_return()。我们在此函数中使用了 print() 方法来在每次按回车键时打印一条消息。最后,我们实例化了 DisplayWindow() 类。

结果是,当我们运行代码时,屏幕上会出现一个带有输入字段的窗口。此外,当我们在应用程序的输入字段中输入所需详细信息并按下“回车”键时,事件处理函数被调用,并且语句打印在命令提示符中。

应用级绑定

我们还可以设置绑定,以便无论哪个小部件具有焦点或正在使用,某个事件都会调用处理程序。此方法称为 bind_all() 方法,用于在应用程序级别绑定事件。

让我们考虑 bind_all() 方法的语法,如下所示

语法

bind_all() 方法与 bind() 方法类似;但是,它适用于整个应用程序中的所有小部件。

例如,程序中可能有一些相同类型的小部件,它们可能属于不同的类。我们可以调用任何小部件上的 bind_all() 方法,以便在应用程序级别绑定事件。在使用 bind_all() 时,我们不需要提及类名,因为绑定应用于应用程序的每个事件。

让我们考虑以下示例,演示 bind_all() 方法的实现。

示例

输出

作为 GUI

Binding Method in Python Tkinter

在命令提示符中

说明

在上述代码片段中,我们导入了 tkinter 模块。然后,我们定义了类 DisplayWindow() 来构建 GUI。在该类中,我们定义了一个初始化函数来设计主窗口。我们调用了 Tk() 类来创建一个空窗口。我们使用 geometry() 方法配置了窗口的大小和位置,并借助 title() 方法设置了其标题。然后,我们使用 Label() 小部件创建了一些标签,以向用户显示信息。然后,我们使用 Entry() 小部件创建了一个输入字段,并使用 bind_all() 方法将输入字段类的回车键按下事件绑定到事件处理函数。然后,我们借助 grid() 方法定位了标签和输入字段。然后,我们调用了 mainloop() 方法来显示窗口。然后,我们定义了一个事件处理函数 on_return()。我们在此函数中使用了 print() 方法来在每次按回车键时打印一条消息。最后,我们实例化了 DisplayWindow() 类。

结果是,当我们运行代码时,屏幕上会出现一个带有输入字段的窗口。此外,当我们在应用程序的输入字段中输入所需详细信息并按下“回车”键时,事件处理函数被调用,并且语句打印在命令提示符中。

结论

在上述教程中,我们了解到 Tkinterbind() 方法用于将事件与小部件的特定函数(称为事件处理程序)连接或关联。此外,我们还了解到 Tkinter 包支持三个级别的绑定:实例级绑定类级绑定应用程序级绑定