2016-07-27 3 views
0

Я создал класс в python, который расширяет холст tkinter. Я пытаюсь прикрепить событие к этому холсту, чтобы обрабатывать клики внутри класса. Он действует, если я прикрепить событие вне самого класса, но при связывании в классе событие щелчка происходит только один раз, а затем переходит ничего не делать вообще только выполняя первый клик:Присоединение события к себе (холст) tkinter

class myCanvas(Canvas): 
    def callback(event): 
     print('clicked at', event.x, event.y) 

    def __init__(self, parent, **kwargs): 
     Canvas.__init__(self, parent, **kwargs) 
     self.bind("<Button-1>", self.callback()) 
     self.height = self.winfo_reqheight() 
     self.width = self.winfo_reqwidth() 

Binding функции событий правильно, только если я присоединяю событие вне класса. Любая помощь в поиске способа прикрепления события к расширенному холсту будет оценена по достоинству.

+1

Невозможно воспроизвести, работает отлично. («Совершенно прекрасно», что означает, что каждый раз, когда я нажимаю, появляется ошибка, потому что отсутствует параметр «self».) Не уверен, имеет ли значение, но какая версия python вы используете? –

+0

Действительно? Я использую python 3.5 и Pycharm, и он работает для меня, но я просто не работаю так, как я ожидаю. – D3181

+0

Вы имеете в виду класс class class mycanvas(), у которого отсутствует параметр self? – D3181

ответ

1

Проблема заключается в этой строке:

self.bind("<Button-1>", self.callback()) 

Вам необходимо подключить что-то вызываемое (другие слова, функция) к событию. На функцию ссылаются self.callback. Если вы вызываете функцию (self.callback()), то вы присоединяете возвращаемое значение от self.callback() к событию клика вместо самой функции.

Смежные вопросы