2016-12-26 4 views
1

는 파이썬의 새로운 그리고 난 다음과 같은 문제가 있습니다Mouse-Event에서 함수로 매개 변수를 전달하는 방법은 무엇입니까?

이 나는 ​​기능 마우스 클릭으로를 호출하는 데 사용하는 코드입니다. 그러나 마우스 단추카운터 인 (필자의 경우)이 필요합니다. 는 어떻게 라벨에 클릭의 기능마우스 클릭으로에서카운터을 통과합니까? 이 코드는 단지 이벤트을 전달합니다. 어디에서 두 번째 매개 변수를 쓸 수 있습니까?

label1.bind('<Button-1>', mouseclick, counter) 

이 :

label1.bind('<Button-1>', mouseclick) 

나는이 시도

label1.bind('<Button-1>', mouseclick(counter)) 

을했지만 작동하지 않았다.

도움 주셔서 감사합니다.

+2

어느 쪽인가? – tdelaney

+0

'mouseclick' 함수는 무엇입니까? – user2314737

+0

이것은 Tkinter –

답변

0

쉽게 lambda를 사용하여, 당신은 정의 매개 변수에 mouseclick에 함수 호출을 결합 할 수있다 "인라인"익명 기능

+0

고맙습니다. 그러나 그것은 효과가 없었습니다. 나는 그것이 옳은 길이라고 생각하지만 그것이 효과가없는 이유. 이 오류가 발생합니다 :'TypeError : ()은 인수가 없습니다 (주어진 1 개)' –

+0

해결하기 위해 지금해야 할 일은 무엇입니까? @ Jean-François –

+0

감사합니다. 작동합니다. –

1

변수와 함수를 연결하는 일반적인 방법은 클래스 인스턴스를 사용하는 것입니다. 파이썬 클래스 메쏘드의 좋은 점은 인스턴스를 특별히 전달하지 않고 나중에 호출 할 수 있도록 인스턴스에 대한 참조를 유지한다는 것입니다.

class Counter: 

    def __init__(self): 
     self.counter = 0 

    def on_click(self, event): 
     self.counter += 1 

mouseclick = Counter() 
label1.bind('<Button-1>', mouseclick.on_click) 
1

하는 것은 당신이이 같은 mouseclick 함수에 변수 counter를 추가 할 수는 Tkinter를 사용하는 경우 :

tk = Tkinter.Tk() 

class MyApp: 

    def __init__(self,parent): 
     self.counter = 0 
     self.myparent = parent 

     self.frame = Tkinter.Frame(tk,relief=RIDGE,borderwidth=2) 
     self.frame.pack() 

     label=Tkinter.Label(self.frame,text="Click me") 
     label.bind('<Button-1>', self.mouseclick) 
     label.pack() 

    def mouseclick(self, event): 
      self.counter+=1 
      print(self.counter) 


myapp = MyApp(tk) 
tk.mainloop()