tkInter函数只给出1个参数2

时间:2014-07-29 00:41:16

标签: binding tkinter typeerror

这似乎是一个常见的问题,但是我有一个似乎有效的功能,另一个没有。我得到了

TypeError:clicked() takes exactly one argument, two given

我将点击的功能绑定到鼠标单击。

但是,与protocal绑定到WM_DELETE_WINDOW事件的处理函数似乎工作正常。两者有何不同?谢谢!

class GUI():
def __init__(self,root,fit_tuples):
    self.fit_tuples=fit_tuples
    self.root=root
    self.root.title("Beam Flux Registry")
    self.root.protocol("WM_DELETE_WINDOW",self.handler)
    ...
    # Calendar Frame
    cal=Calendar(LeftFrame)
    cal.pack(side=TOP)
    cal.bind("<Button-1>",self.clicked)
    ...
    #Mainloop
    root.mainloop()

def clicked(self):
    print "%i/%i/%i"%(self.cal.selection.month,self.cal.selection.day,self.cal.selection.year)

def handler(self):
    self.root.destroy()
    self.root.quit()

1 个答案:

答案 0 :(得分:1)

您需要在clicked()方法中考虑Event对象。当您bind一个小部件时,处理绑定的函数将接收一个对象,该对象具有关于触发该函数的事件的属性(即,对于鼠标单击事件,您将收到一个具有光标属性的对象) x和y)。

另一种方法有效,因为protocol没有将任何参数传递给处理程序。