所以我写了这个非常简单的事情,它让我试图找出它为什么不能工作。只需单击即可打印一条语句。
因此,对于第一个示例,我有一个按钮并直接为其分配了函数printName1
,这非常合适。
接下来就是使用.bind()
函数绑定它。因此,在这种情况下,我们只有一个框架,根据您按下的按钮打印出某些内容。但不幸的是,每当我使用bind时,它都会抛出上面显示的错误。引用tkinter\__init__.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()
编辑:错误令人困惑,因为它看起来似乎有一个额外的参数应该有0.但实际上我需要为函数添加一个参数,那就是事件。所以它应该是def printName1(事件)等等。我想让我们知道什么对我有用,万一有人偶然发现了这一点。
答案 0 :(得分:4)
如果你引用documentation regarding tkinter events and bindings,你会看到当一个事件被触发时,相关的事件对象将作为第一个(也是唯一的)参数传递给有界函数(printName1
和你朋友一样。)
所以你需要做的就是修改那些printName*
函数来接受事件参数。
def printName1(event):
print('Jack')
那么你想要达到的目标应该有效。
当然,您可以将event
参数设为@ TigerhawkT3建议的可选参数。
答案 1 :(得分:2)
来自键盘/鼠标的事件都会被发送到应用程序,其中包含有关事件的信息:它是哪个键,点击时鼠标在哪里,等等。这意味着绑定到此类事件的任何回调都需要参数。如果你想将它绑定到一个没有事件的Tkinter Button
,你也可以处理它。只需使用默认参数定义函数:
def printName1(event=None):
...