Python Tkinter中调用绑定组件的函数触发TypeError的解决方法
修复Tkinter绑定事件引发的TypeError问题
这个问题我太熟悉了!咱们先搞明白为啥会报错:
你定义的printword函数要求必须传入一个event参数——当你用bind把它和<Control-Key-s>快捷键绑定时,Tkinter触发这个函数时会自动把事件对象传进去,所以这部分是正常的;但你后面直接写了printword(),这时候没有给函数传任何参数,自然就会抛出「缺少必需的位置参数event」的错误啦。
给你两种简单的修复方案,选哪种都行:
方案一:给event参数设置默认值(推荐)
直接修改函数定义,给event参数加个默认值None,这样不管是Tkinter自动触发(会传event对象)还是你手动调用(用默认的None),函数都能正常运行:
def printword(event=None): print("hello")
完整的修复后代码如下:
import tkinter from tkinter import * def printword(event=None): print("hello") app = Tk() textpane = tkinter.Text(app) textpane.bind('<Control-Key-s>', printword) textpane.pack() printword() # 现在手动调用不会报错了 app.mainloop()
方案二:手动调用时传入占位参数
如果你不想修改函数的定义,那在手动调用printword的时候,给它传一个占位的参数(比如None)就行:
printword(None)
不过这种方式灵活性差一点,以后再调用这个函数都得记得传参数,所以还是方案一更省心。
内容的提问来源于stack exchange,提问作者Amey patil
相关产品推荐
相关产品推荐

