Python TypeError:printName1()接受0个位置参数,但给出了1个
所以我写了一篇非常简单的文章,试图弄明白为什么它不起作用,这让我很痛苦。它所做的一切都是在单击时打印一条语句 因此,在第一个示例中,我有一个按钮,并将函数Python TypeError:printName1()接受0个位置参数,但给出了1个,python,tkinter,typeerror,Python,Tkinter,Typeerror,所以我写了一篇非常简单的文章,试图弄明白为什么它不起作用,这让我很痛苦。它所做的一切都是在单击时打印一条语句 因此,在第一个示例中,我有一个按钮,并将函数printName1直接分配给它,效果非常好 接下来的事情是使用.bind()函数绑定它。所以在这个例子中,我们有一个框架,根据你按下的按钮打印出某些东西。但不幸的是,每当我使用bind时,它就会抛出上面显示的错误。错误引用了tkinter\\uuuuu init\uuuuuu.py,因此这不是我代码中的直接内容,但可能需要以不同的方式执行?谢
printName1
直接分配给它,效果非常好
接下来的事情是使用.bind()
函数绑定它。所以在这个例子中,我们有一个框架,根据你按下的按钮打印出某些东西。但不幸的是,每当我使用bind时,它就会抛出上面显示的错误。错误引用了tkinter\\uuuuu init\uuuuuu.py
,因此这不是我代码中的直接内容,但可能需要以不同的方式执行?谢谢各位
from tkinter import *
root = Tk()
def printName1():
print('Jack')
def printName2():
print('John')
def printName3():
print('Jill')
frame = Frame(root, width=300, height=250)
frame.bind("<Button-1>", printName1)
frame.bind("<Button-2>", printName2)
frame.bind("<Button-3>", printName3)
frame.pack()
root.mainloop()
从tkinter导入*
root=Tk()
def printName1():
打印(‘杰克’)
def printName2():
印刷品(‘约翰’)
def printName3():
打印(‘吉尔’)
框架=框架(根,宽度=300,高度=250)
frame.bind(“,printName1)
frame.bind(“,printName2)
frame.bind(“,printName3)
frame.pack()
root.mainloop()
编辑:该错误令人困惑,因为它使它看起来好像有一个额外的参数时,应该有0。但实际上我需要在函数中添加一个参数,这就是事件。所以它应该是def printName1(事件)等等。我想我会让你们知道什么对我有用,以防有人无意中发现这一点。如果您参考,您将看到当触发事件时,关联的事件对象将作为第一个(也是唯一一个)参数传递给有界函数(在您的例子中是printName1
和friends)
因此,您需要做的是修改那些printName*
函数以接受事件参数
def printName1(event):
print('Jack')
那么,你想要达到的目标应该是有效的
当然,您可以按照@TigerhawkT3的建议,将
事件
参数设置为可选。事件(例如来自键盘/鼠标的事件)都会发送到应用程序,其中包含有关事件的信息:它是哪个键,单击鼠标时鼠标在哪里,诸如此类。这意味着绑定到此类事件的任何回调都需要使用参数。如果您还想将它绑定到一个不接受事件的Tkinter按钮
,您也可以处理它。只需使用默认参数定义函数:
def printName1(event=None):
...
不仅仅是键盘和鼠标事件,还有所有事件。我没有想到其他输入设备,比如操纵杆。我想这是任何用户输入,比如说,
按钮
激活之外?有虚拟事件,比如
,还有低级事件,比如
,
和其他。啊,是的,非常正确。任何此类回调都需要事件的参数。