Шаг 235.
Библиотека PyQt5.
Графическая сцена. Обработка событий. События клавиатуры
На этом шаге мы рассмотрим особенности обработки графическими объектами событий клавиатуры.
При обработке событий клавиатуры следует учитывать, что:
- графический объект должен иметь возможность принимать фокус ввода. Для этого необходимо установить флаг ItemIsFocusable, например, с помощью метода setFlag()
класса QGraphicsItem;
- объект должен быть в фокусе ввода. Методы, позволяющие управлять фокусом ввода, мы рассматривали в 204 и 214 шагах;
- чтобы захватить эксклюзивный ввод с клавиатуры, следует вызвать у графического объекта метод grabKeyboard(), а чтобы освободить ввод - метод ungrabKeyboard();
- можно перехватить нажатие любых клавиш, кроме Tab и Shift+Tab, используемых для передачи фокуса;
- если событие обработано, нужно вызвать метод accept() у объекта события, в противном случае - метод ignore().
Для обработки событий клавиатуры следует наследовать класс, реализующий графический объект, и переопределить в нем методы:
- focusInEvent (self, <event>) - вызывается при получении фокуса ввода. Через параметр <event> доступен экземпляр класса QFocusEvent (см. 61 шаг);
- focusOutEvent (self, <event>) - вызывается при потере фокуса ввода. Через параметр <event> доступен экземпляр класса QFocusEvent (см. 61 шаг);
- keyPressEvent (self, <event>) - вызывается при нажатии клавиши на клавиатуре. Если клавишу удерживать нажатой, метод будет вызываться постоянно, пока ее не отпустят.
Через параметр <event> доступен экземпляр класса QKeyEvent (см. 66 шаг);
- keyReleaseEvent (self, <event>) - вызывается при отпускании нажатой ранее клавиши. Через параметр <event> доступен экземпляр класса QKeyEvent (см. 66 шаг).
С помощью метода setFocusProxy(<QGraphicsItem>) класса QGraphicsItem можно указать объект, который будет обрабатывать события клавиатуры вместо текущего объекта.
Получить ссылку на назначенный ранее объект-обработчик событий клавиатуры позволяет метод focusProxy().
На следующем шаге мы рассмотрим события мыши.
Предыдущий шаг
Содержание
Следующий шаг