Tkinter 事件绑定
在tkinter应用程序中最后一个指令是mainloop( ),这个方法是让程序进入事件等待循环,除了如11-1节的Widget控件状态改变可以调用相对应的事件处理程序外,tkinter也提供了为事件绑定处理程序的机制。它的语法格式如下。
widget.bind(event,handler)
上述绑定语法中widget是事件的来源,可以是root窗口对象,或是任意的Widget控件,例如,功能按钮、选项按钮、复选框……handler是事件处理程序。
鼠标相关的事件如下表所示。
键盘相关的事件如下表所示。
控件相关事件如下表所示。
了解了以上事件绑定后,其实我们已经可以试着学习自我设计事件绑定处理程序,同时将事件处理程序与一般事件绑在一起。我们从先前的学习中可以知道,单击功能按钮时可以执行某个动作,所使用的是在Button( )内增加command参数,然后单击功能按钮时让程序执行command所指定的方法。
其实设计功能按钮程序时,若是在Button( )内省略command参数,所产生的影响是单击功能按钮时没有动作。然后我们可以使用本节的知识重新让单击功能按钮有动作产生,假设功能按钮对象是btn,可以使用下列方式建立单击与事件的绑定。
btn.bind("<Button-1>", event handler)
示例
使用事件绑定方式让单击Click me按钮后可以列出“Button clicked”字符串。对这个程序而言,功能按钮就是bind( )方法的事件来源,所以第21行用btn.bind( )建立绑定工作。
from tkinter import *
def pythonClicked(): # Python复选框事件处理程序
if varPython.get():
lab.config(text="Select Python")
else:
lab.config(text="Unselect Python")
def javaClicked(): # Java复选框事件处理程序
if varJava.get():
lab.config(text="Select Java")
else:
lab.config(text="Unselect Java")
def buttonClicked(event):
lab.config(text="Button clicked")
root = Tk()
root.title("apidemos.com") # 窗口标题
root.geometry("300x180") # 窗口宽300高180
btn = Button(root,text="Click Me")
btn.pack(anchor=W)
btn.bind("<Button-1>",buttonClicked) # 单击Click Me绑定buttonClicked方法
varPython = BooleanVar()
cbnPython = Checkbutton(root,text="Python",variable=varPython,
command=pythonClicked)
cbnPython.pack(anchor=W)
varJava = BooleanVar()
cbnJava = Checkbutton(root,text="Java",variable=varJava,
command=javaClicked)
cbnJava.pack(anchor=W)
lab = Label(root,bg="yellow",fg="blue",
height=2,width=12,
font="Times 16 bold")
lab.pack()
root.mainloop()
输出: