3.8 tkinter 事件绑定的参数传递

1 绑定无参数的函数

下面直接看一个事件绑定的例子:

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") # 添加标题
        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" 配置选项,绑定了无参数的函数 self.say_hi

2 绑定有参数传递的函数

如果想要向被绑定的函数中传递参数,可以借助 lambda 匿名函数进行操作。比如,修改上面的 say_hi() 为:

def say_hi(self, *args):
    init_str = "看这里!\n"
    out = init_str + ' '.join(args)
    self.var.set(out)

并且对应的 self.hi_there["command"] = self.say_hi 修改为:

self.hi_there["command"] = lambda : self.say_hi('Tom', 'Jack', 'Lily')

或者(鼠标左键触发事件)

self.bind('<1>', lambda event: self.say_hi('Tom', 'Jack', 'Lily'))

效果图:

图2 可传递参数的绑定
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。