Tkinter如何实现按钮的command回调将按钮自身作为参数传入?
Tkinter按钮回调传入自身实例的实现方法
你原有写法存在两个问题:
- 实例化按钮的过程中引用还未创建完成的
self.buttonExcel2变量,触发属性错误 - 给
command参数赋值时直接执行了self.clicked(self.buttonExcel2),实际是把函数的返回值绑定给了点击事件,而不是把函数本身作为回调绑定
可行的实现方式有以下两种:
分两步配置按钮(最常用,无需修改原有回调函数的参数结构)
先完成按钮实例化,再通过config方法绑定带参数的回调,用lambda包装避免函数立即执行:# 第一步:创建按钮实例,暂不指定command self.buttonExcel2 = tk.Button(self, text = 'A') # 第二步:绑定回调,此时按钮实例已创建完成可正常引用 self.buttonExcel2.config(command = lambda: self.clicked(self.buttonExcel2))通过事件绑定获取按钮实例
用bind方法绑定鼠标点击事件,回调函数可以直接从事件参数中拿到触发事件的控件对象:# 按钮实例化 self.buttonExcel2 = tk.Button(self, text = 'A') # 绑定左键点击事件 self.buttonExcel2.bind('<Button-1>', self.clicked) # 对应回调函数写法 def clicked(self, event): # 从event参数中直接获取触发事件的按钮实例 current_btn = event.widget # 后续对按钮的操作直接使用current_btn即可
内容的提问来源于stack exchange,提问作者gubith
相关产品推荐
相关产品推荐

