2016-12-26 6 views
1

Я новичок в Python и у меня есть следующая проблема:Как передать параметры из Mouse-Event в функцию?

Это код, я использую, чтобы вызвать функцию MouseClick. Но mouseclick нуждается в параметре счетчик (в моем случае). Как передатьсчетчикв функцииMouseclickпри щелчке на этикетке? Этот код здесь просто передает параметр event. Где можно записать второй параметр?

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

Я попытался это:

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

и это:

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

, но это не сработало.

Благодарим за помощь!

+2

который gui это? – tdelaney

+0

Что такое функция 'mouseclick'? – user2314737

+0

Это Tkinter –

ответ

0

легко с помощью lambda, вы можете связать вызов функции mouseclick параметру, определение «встроенная» анонимная функция

label1.bind('<Button-1>', lambda event : mouseclick(event,counter)) 
+0

Спасибо. Но это не сработало. Я думаю, что это правильный путь, но почему это не работает. Я получаю эту ошибку: 'TypeError: () не принимает аргументов (1 данный)' –

+0

Что мне нужно сделать, чтобы исправить это? @ Jean-François –

+0

Хорошо, спасибо! –

1

Общим способом связывания переменной с функцией является использование экземпляра класса. Самое приятное в методах класса python заключается в том, что они сохраняют ссылку на свой экземпляр, чтобы их можно было вызвать позже, не передавая конкретный экземпляр.

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

Если вы используете Tkinter вы можете добавить переменную counter к mouseclick функции, как это:

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()