这似乎是一个常见的问题,但是我有一个似乎有效的功能,另一个没有。我得到了
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()
答案 0 :(得分:1)
您需要在clicked()
方法中考虑Event
对象。当您bind
一个小部件时,处理绑定的函数将接收一个对象,该对象具有关于触发该函数的事件的属性(即,对于鼠标单击事件,您将收到一个具有光标属性的对象) x和y)。
另一种方法有效,因为protocol
没有将任何参数传递给处理程序。