6.2 KiB
Tkinter 中的绑定:完全指南
原文:https://www.askpython.com/python-modules/tkinter/bind-in-tkinter
在本文中,让我们试着理解 Tkinter 中使用的 bind 概念。在开始这个主题之前,我们必须记住 Python 的 Tkinter 包是用来设计基于 GUI 的界面的。Tkinter 具有多种内置功能和扩展,可用于增强应用程序的功能和性能。
bind 是什么?
单词 bind 的基本定义是粘在一起或使粘在一起成为一个整体。类似地,Tkinter bind 用于连接小部件中传递的事件和事件处理程序。事件处理程序是在事件发生时被调用的函数。
widget.bind(sequence=None, func=None, add=None)
*sequence* 参数描述了我们期望的事件,而 func 参数是当事件发生在小部件上时要调用的函数。如果这个小部件的那个事件已经有一个绑定,通常旧的回调会被替换为 func ,但是您可以通过传递add='+'来保留这两个回调。
可以使用不同级别的绑定函数将事件绑定到事件处理程序。
1.实例级绑定
人们可以将一个事件绑定到一个特定的小部件。要绑定小部件的事件,调用小部件上的.bind()方法。
widget.bind(event, event handler)
- 事件–由用户引起的可能反映变化的事件。
- 事件处理器–事件发生时应用程序中被调用的函数。
- Bind–配置一个事件处理程序(python 函数),当一个事件发生在一个小部件上时,调用这个事件处理程序。
以下是如何将事件绑定到小部件的特定实例的示例。
import tkinter as tk
class Display:
def __init__(self):
self.root = tk.Tk()
self.entry1 = tk.Entry(self.root)
self.entry1.bind("<KeyPress>", self.onKeyPress)
self.entry1.pack()
self.root.mainloop()
def onKeyPress(self, event):
print("Key has been Pressed.")
display = Display()
输出
Implementation
多重绑定
如果我们需要将一个以上的功能绑定到一个特定的小部件,该怎么办?传递两个包含 bind the 函数的语句肯定是行不通的,因为第二个语句会覆盖第一个语句,因此只有第二个函数会被调用,如下所示
Implementation
这个问题可以通过向使用bind函数的第二条语句添加一个额外的参数**add**来解决。另外,不要忘记分配 add="+"。这将调用两个函数。因此,我们可以在 Tkinter 中启用多重绑定。
Implementation
2.类级绑定
可以将一个事件绑定到一个类的所有小部件。例如,您可以通过在英语和日语标签之间来回切换来设置所有的Button小部件来响应鼠标中键的点击。要将一个事件绑定到一个类的所有小部件,调用任何小部件上的.bind_class()方法。
bind_class中提到的“类”是指 tk 库使用的内部类名,而不是 python 类名。bind_class是一个对所有小部件都可用的方法,它简单地再次调用 Tk bind 命令,但是不是用实例名,而是用小部件类名。
w.bind_class(className, sequence=None, func=None, add=None)
.bind_class的基本工作与.bind功能相同。
例如,假设你有同一个类的几个小部件,这里我们假设我们有多个入口小部件,我们需要把它们都设置成同一个函数。您不必为每一个都调用.bind(),而是可以像这样用一个调用来设置它们:
from tkinter import *
import tkinter as tk
class Display:
def __init__(self):
self.root = tk.Tk()
self.entry_username = tk.Entry(self.root)
self.entry_birthday = tk.Entry(self.root)
self.entry_password= tk.Entry(self.root)
self.entry_username.bind_class("Entry", "<Return>", self.onReturn)
self.entry_username.pack()
self.entry_birthday.pack()
self.entry_password.pack()
#to know the class type of the widget use following command.
#print(self.entry_username.winfo_class())
self.root.mainloop()
def onReturn(self, event):
print("Return pressed")
display = Display()
输出
Implementation
3.应用程序级绑定
我们可以设置一个绑定,这样不管什么小部件有焦点或者在鼠标下面,某个事件都会调用一个处理程序。
w.bind_all(sequence=None, func=None, add=None)
类似于.bind(),但是适用于整个应用程序中的所有小部件。
例如,在整个程序中可能有多个相同类型的小部件,它们属于不同的类。要在应用程序级别绑定事件,请在任何小部件上调用.bind_all()方法。一边用。bind_all 您不需要提及类名,因为绑定应用于应用程序的每个事件。下面是实现它的方法,
from tkinter import *
import tkinter as tk
class Display:
def __init__(self):
self.root = tk.Tk()
self.entry_username = tk.Entry(self.root)
self.entry_birthday = tk.Entry(self.root)
self.entry_password = tk.Entry(self.root)
self.entry_username.bind_all("<Return>", self.onReturn)
self.entry_username.pack()
self.entry_birthday.pack()
self.entry_password.pack()
#to know the class type of the widget use following command.
print(self.entry_username.winfo_class())
self.root.mainloop()
def onReturn(self, event):
print("Return pressed")
display = Display()
输出
Implementation
摘要
在本文中,我们已经了解到,绑定是 Tkinter 中使用的函数,用于将事件与小部件的特定函数(称为事件处理程序)连接或关联。此外,Tkinter 支持三种级别的绑定:实例级绑定、类级绑定和应用程序级绑定。




