3.8 tkinter 事件綁定的參數(shù)傳遞

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ù)的綁定
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容