在本文中,我们尝试了解 Tkinter 中使用的绑定概念。在开始本主题之前,我们必须记住Python的Tkinter包用于设计基于GUI的界面。Tkinter 具有各种内置功能和扩展,可用于增强应用程序的功能和性能。
什么是绑定?
结合这个词的基本定义是粘在一起或导致粘在一起形成一个整体。类似地,Tkinter 绑定用于连接小部件中传递的事件以及事件处理程序。事件处理程序是事件发生时调用的函数。
widget.bind(sequence = None , func = None , add = None ) |
该
参数描述了我们期望的事件,而 func 参数是当该事件发生在小部件上时要调用的函数。如果此小部件已存在该事件的绑定,通常旧回调会替换为func,但您可以通过传递 来保留这两个回调 sequence
add='+'
。
可以使用不同级别的绑定函数将事件绑定到事件处理程序。
1.实例级绑定
人们可以将事件绑定到一个特定的小部件。要绑定小部件的事件,请调用 .bind()
该小部件上的方法。
widget.bind(event, event handler)
- 事件 – 由用户引起的可能反映更改的事件。
- 事件处理程序 – 应用程序中的函数,在事件发生时调用。
- 绑定 – 配置一个事件处理程序(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() |
输出
多重绑定
如果我们需要将多个函数绑定到一个特定的小部件怎么办?传递两个包含该函数的语句 bind the
肯定不起作用,因为第二个语句将覆盖第一个语句,因此只会调用第二个函数,如下所示
add
通过向使用该函数的第二条语句添加一个额外参数即可解决此问题bind
。另外不要忘记分配 add=”+”。这将调用这两个函数。因此我们可以在 Tkinter 中启用多重绑定。
2. 类级绑定
可以将事件绑定到一类的所有小部件。例如,您可以将所有小部件设置 Button
为通过在英语和日语标签之间来回更改来响应鼠标中键单击。要将事件绑定到类的所有小部件,请 .bind_class()
在任何小部件上调用该方法。
中提到的“类” bind_class
是指tk库使用的内部类名,而不是python类名。bind_class
是所有小部件都可用的方法,只需再次调用 Tk 绑定命令,但不使用实例名称,而是使用小部件类名称。
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() |
输出
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() |
输出
概括
在本文中,我们了解了 Bind 是 Tkinter 中使用的函数,用于将事件与称为小部件事件处理程序的特定函数连接或关联。此外,Tkinter 支持三种级别的绑定:实例级绑定、类级绑定和应用程序级绑定。
参考
https://web.archive.org/web/20190514010732id_/http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html