На этом шаге мы рассмотрим создание и использование таких событий.
Если в каком-либо компоненте приложения нам необходимо обрабатывать события со сложными наименованиями (о наименовании событий рассказывалось на 7 шага), мы можем задать для них более короткое наименование, создав тем самым виртуальное событие. Виртуальные события обрабатываются точно так же, как и обычные.
Поддержкой виртуальных событий заведуют следующие методы, предоставляемые всеми компонентами:
self.entValue.event_add("<<DblClick>>, "<Double-Button>", <Shift-Control-Button>") self.entValue.bind("<<DblClick>>", self.dbl_click_handler)
Здесь мы создаем у поля ввода entValue виртуальное событие DblClick и связываем его с обычными событиями Double-Button и Shift-Control-Button. В результате созданное нами виртуальное событие будет возникать при двойном щелчке кнопкой мыши и одинарном щелчке при удерживании клавиш <Shift> и <Ctrl>. После чего сразу же привязываем к только что созданному событию обработчик;
self.entValue.event_delete("<<DblClick>>, <Shift-Control-Button>")
Теперь виртуальное событие DblClick будет возникать в поле ввода entValue только после двойного щелчка мышью.
После удаления последнего связанного обычного события виртуальное событие также будет удалено;
print(self.entValue.event_info())
def show_value(self): print(self.varValue.get()) print(self.entValue.event_info())
Результат:
('<<SelectNextPara>>', '<<SelectNextWord>>', '<<Cut>>',
'<<SelectNextChar>>', '<<SelectLineEnd>>', '<<SelectPrevWord>>',
'<<PasteSelection>>', '<<SelectPrevLine>>', '<<PrevPara>>',
'<<SelectNone>>', '<<NextWindow>>', '<<SelectPrevPara>>',
'<<NextWord>>', '<<PrevWord>>', '<<Paste>>',
'<<ToggleSelection>>', '<<PrevLine>>', '<<PrevChar>>',
'<<LineStart>>', '<<ContextMenu>>', '<<LineEnd>>',
'<<Copy>>', '<<NextChar>>', '<<SelectNextLine>>',
'<<NextPara>>', '<<SelectPrevChar>>', '<<Undo>>',
'<<PrevWindow>>', '<<NextLine>>', '<<SelectLineStart>>',
'<<Redo>>', '<<SelectAll>>')
Если же в качестве единственного параметра в вызове метода указать строку с наименованием виртуального события, вернется кортеж из наименований обычных событий, связанных с этим виртуальным событием, которые также представлены в виде строк:
print(self.entValue.event_info("<<DblClick>>"))
Результат:
('<Double-Button>')
На следующем шаге мы рассмотрим генерацию событий.