You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:18:03