Tkinter下拉菜单与快捷键共用函数缺失event参数报错如何解决
问题原因
Tkinter的快捷键绑定触发回调函数时,会自动传入一个*事件对象(event)*作为参数;而菜单add_command的command参数调用函数时,不会传入任何参数,因此调用只接受self和event两个参数的dosomthing方法时就会报错缺失参数。
解决方法
最简便的修改方案是把event参数设置为可选参数,默认值设为None即可,无需修改其他绑定逻辑:
# 仅修改dosomthing方法的参数定义即可 def dosomthing(self, event=None): print('Somthing Was Done!')
修改后的完整代码如下:
from tkinter import * class app: def __init__(self): self.root = root self.root.geometry('500x380') self.root.title('Text Editor') self.menu = Menu(self.root) self.root.config(menu=self.menu) self.submenu = Menu(self.menu) self.menu.add_cascade(label='Tab', menu=self.submenu) self.submenu.add_command(label='Do Somthing', command=self.dosomthing) self.root.bind('<Control-r>', self.dosomthing) # 仅修改此处:给event参数加默认值None def dosomthing(self, event=None): print('Somthing Was Done!') root = Tk() app() root.mainloop()
可选替代方案
你也可以选择在绑定快捷键时用lambda包装函数,主动丢弃event参数,这样dosomthing方法不需要保留event参数:
# 绑定快捷键的代码修改为 self.root.bind('<Control-r>', lambda event: self.dosomthing()) # 方法定义修改为 def dosomthing(self): print('Somthing Was Done!')
内容的提问来源于stack exchange,提问作者roee1454
相关产品推荐
相关产品推荐

