Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:printName1()接受0个位置参数,但给出了1个_Python_Tkinter_Typeerror - Fatal编程技术网

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):
    ...

不仅仅是键盘和鼠标事件,还有所有事件。我没有想到其他输入设备,比如操纵杆。我想这是任何用户输入,比如说,
按钮
激活之外?有虚拟事件,比如
,还有低级事件,比如
和其他。啊,是的,非常正确。任何此类回调都需要事件的参数。