5

我正在尝试使用 Tkinter 将类方法绑定到信号,但出现以下错误:

TypeError: event_foo() 只需要 1 个参数(给定 2 个)

我过去经常使用绑定,没有任何问题,但我不明白第二个论点(我显然是在不知道的情况下给出的)来自哪里。

代码示例:(简化)

class Controller:
    def__init__(self, myVar, myWidget):
        self.myVar = myVar
        self.myWidget = myWidget

        self.connect(self, myWidget, "<Double-Button-1>", event_foo)

    def event_foo(self):
        """ Does stuff """

    #Simplified to a wrapper, real function does other actions
    def connect(self, widget, signal, event) 
        widget.bind(signal, event)
4

2 回答 2

5

我在输入问题时想通了,所以我会回答自己,以防其他人遇到这个问题这是修复示例的代码:

class Controller:
    def__init__(self, myVar, myWidget):
        self.myVar = myVar
        self.myWidget = myWidget

        self.connect(self, myWidget, "<Double-Button-1>", event_foo)

    def event_foo(self, event=None): ###event was the implicit argument, I set it to None because I handle my own events and don't use the Tkinter events
        """ Does stuff """

    #Simplified to a wrapper, real function does other actions
    def connect(self, widget, signal, event) 
        widget.bind(signal, event)

尽管如此,我们仍将高度赞赏有关其工作原理的澄清。它是可靠的,还是我正在使用一种危险的丑陋解决方法,迟早会出现在我的脸上?

于 2013-07-31T19:16:45.537 回答
0

我得到以下代码以相同的行为工作,但更简单。

class Controller:
    def __init__(self, myVar, myWidget):
        self.myVar = myVar
        self.myWidget = myWidget

        self.myWidget.bind('<Double-Button-1>', self.event_foo)

    def event_foo(self, event): 
        """ Does stuff """
于 2015-10-22T21:09:33.440 回答