1 綁定無參數(shù)的函數(shù)
下面直接看一個事件綁定的例子:
from tkinter import ttk, Tk
from tkinter import N, W, E, S
from tkinter import StringVar
class App(ttk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.var = StringVar()
self.create_widgets()
self._layout()
def create_widgets(self):
self.hi_there = ttk.Button(self)
self.hi_there["text"] = "歡迎進入 GUI 世界\n(點我)"
self.hi_there["command"] = self.say_hi
self.print_label = ttk.Label(textvariable=self.var)
self.quit = ttk.Button(self, text="QUIT")
self.quit["command"] = self.master.destroy
def _layout(self):
self.master.title("簡單的 GUI") # 添加標(biāo)題
self.master.maxsize(1000, 400) # 改變窗體尺寸
self['padding'] = ("3 3 12 12")
self.grid()
self.hi_there.grid(column=0, row=0, sticky=(N, W, E, S))
self.print_label.grid(column=0, row=1)
self.quit.grid(column=1, row=1)
def say_hi(self):
self.var.set("看這里!")
root = Tk()
app = App(root)
app.mainloop()
效果圖:

圖1 事件綁定的一個簡單例子
該例子使用 "command" 配置選項,綁定了無參數(shù)的函數(shù) self.say_hi。
2 綁定有參數(shù)傳遞的函數(shù)
如果想要向被綁定的函數(shù)中傳遞參數(shù),可以借助 lambda 匿名函數(shù)進行操作。比如,修改上面的 say_hi() 為:
def say_hi(self, *args):
init_str = "看這里!\n"
out = init_str + ' '.join(args)
self.var.set(out)
并且對應(yīng)的 self.hi_there["command"] = self.say_hi 修改為:
self.hi_there["command"] = lambda : self.say_hi('Tom', 'Jack', 'Lily')
或者(鼠標(biāo)左鍵觸發(fā)事件)
self.bind('<1>', lambda event: self.say_hi('Tom', 'Jack', 'Lily'))
效果圖:

圖2 可傳遞參數(shù)的綁定