无论我如何尝试,我都会收到我需要向活动发送参数的错误。
并且在您说要查看文档之前是。我已经看了它,但它对我正在做的事情没有帮助,因为它永远不会在课堂上。
from tkinter import *
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.callback()
self.initUI()
self.mainloop()
def callback(self, event):
print("made it")
def initUI(self):
canvas = Canvas(self, height = 300, width = 300)
canvas.create_rectangle(1.5,1.5,40,40, tag = "obj1")
canvas.tag_bind("obj1", '<Button-1>', callback) #where I assume the problem is happening
A = App()
编辑:回调一直说它需要另一个论点,但我不知道它需要什么
答案 0 :(得分:0)
您已将回调定义为采用两个参数:self
(意思是,它是对象上的方法)和event
。当您使用self.callback()
直接调用它时,self
会自动通过,但您不会在事件中传递。这就是为什么你得到错误说它需要另一个参数。它预计有两个,但只有一个。
通过直接调用您的回调,您不清楚自己尝试做什么,但快速解决方法是将event
属性设置为可选,以便您可以直接或通过绑定调用回调。当然,这仅在您的绑定实际上不使用event
参数时才有效。如果是这样,在没有event
的情况下调用它时,您可能会发现它失败。
以下是使event
参数可选的示例:
def callback(self, event=None):
print("made it")
解决了一个问题,但您还必须更改绑定的定义方式,否则代码会在启动时崩溃。您需要在回调中添加self
:
canvas.tag_bind("obj1", '<Button-1>', self.callback)
调用回调时,self
会再次作为第一个参数自动传递。 Tkinter会自动添加event
参数。
迂腐地说,你不应该在mainloop()
内拨打__init__
。这可以防止App
对象完全构建。正确的方法是在构造函数之外调用mainloop
:
A = App()
A.mainloop()