1.Widget的command参数
功能按钮(Button)、数值滚动条(Scale)等。其实这就是一个Widget的事件绑定的概念,当按钮事件发生、当数值滚动条值改变……就可以通过command=callback,设计callback函数,这个callback函数就是事件处理程序。
Button(tk, text="button", command=函数名)
2.事件绑定
from tkinter import *
def buttonClicked(event):
label.config(text="Button Clicked")
tk = Tk()
tk.title("tk")
button = Button(tk, text="鼠标左键点击触发")
button.pack()
button.bind("<Button-1>", buttonClicked) # <Button-1>是触发事件(鼠标左键点击按钮),buttonClicked是事件处理程序
label = Label(tk)
label.pack()
tk.mainloop()
点击前
点击后
事件绑定的语法格式如下:
widget.bind(event, handler)
上述绑定语法中widget是事件的来源,可以是root窗口对象,或是任意的Widget控件,例如,功能按钮、选项按钮、复选框……handler是事件处理程序。
其中鼠标相关的事件如下:
键盘相关的事件如下:
控件相关事件如下:
鼠标事件的基本应用,这个程序在执行时会建立300×180大小的窗口,当单击鼠标左键时,在Python Shell窗口中会列出单击事件时的坐标。
from tkinter import *
def callback(event):
print(event.x, event.y)
tk = Tk()
tk.title("tk")
frame = Frame(tk, width=300, height=180)
frame.bind("<Button-1>", callback)
frame.pack()
tk.mainloop()
3. 取消绑定
语法格式:
obj.unbind("<...>")
例如:button.unbind("<Button-1>")
:取消鼠标左键触发按钮
4.Protocols
Protocols可以翻译为通信协议,在tkinter内可以解释为窗口管理程序(Windows Manager)与应用程序(Application)之间的通信协议。tkinter也支持使用绑定概念更改此通信协议。
程序实例:单击通信协议(Protocols)内容窗口右上角的[插图]按钮可以关闭窗口,它的名称是WM_DELETE_WINDOW。这个程序会修改此协议,改为单击此按钮后增加Messagebox,询问“结束或取消”,若是单击“确定”按钮才会结束此程序。
from tkinter import *
from tkinter import messagebox
def callback():
res = messagebox.askokcancel("OKCANCEL","结束或取消?")
if res == True:
tk.destory()
else:
return
tk = Tk()
tk.protocol("WM_DELETE_WINDOW", callback)
tk.mainloop()
当按下‘X’时,跳出MessageBox
5. 一个事件绑定多个事件处理程序
程序先执行bind()绑定的程序,然后再执行Button( )内command指定的程序。