Шаг 236.
Библиотека PyQt5.
Графическая сцена. Обработка событий. События мыши
На этом шаге мы рассмотрим особенности обработки графическими объектами событий мыши.
Для обработки нажатия кнопки мыши и перемещения мыши следует наследовать класс, реализующий графический объект, и переопределить в нем такие методы:
- mousePressEvent (self, <event>) - вызывается при нажатии кнопки мыши над объектом. Через параметр <event> доступен экземпляр класса
QGraphicsSceneMouseEvent. Если событие принято, необходимо вызвать метод accept() объекта события, в противном
случае - метод ignore(). Если был вызван метод ignore(), методы mouseReleaseEvent() и mouseMoveEvent() выполнены не будут.
С пощью метода setAcceptedMouseButtons(<Kнопки>) класса QGraphicsItem можно
указать кнопки, события от которых объект будет принимать. По умолчанию объект принимает события от всех кнопок мыши. Если в параметре <Kнопки>
указать атрибут NoButton класса Qtcore.Qt, объект вообще не станет принимать события от кнопок мыши;
- mouseReleaseEvent (self, <event>) - вызывается при отпускании ранее нажатой кнопки мыши. Через Параметр <event> доступен экземпляр класса
QGraphicsSceneMouseEvent;
- mouseDoubleClickEvent (self, <event>) - вызывается при двойном щелчке мышью в области объекта. Через параметр <event> доступен
экземпляр класса QGraphicsSceneMouseEvent;
- mouseMoveEvent (self, <event>) - вызывается при перемещении мыши. Через параметр
<event> доступен экземпляр класса QGraphicsSceneMouseEvent.
Класс QGraphicsSceneMouseEvent наследует все методы классов QGraphicsSceneEvent и QEvent и добавляет поддержку следующих методов:
- pos () - возвращает экземпляр класса QPointF с координатами указателя мыши в пределах области объекта;
- scenePos () - возвращает экземпляр класса QPointF с координатами указателя мыши в пределах сцены;
- screenPos () - возвращает экземпляр класса QPoint с координатами указателя мыши в пределах экрана;
- lastPos () - возвращает экземпляр класса QPointF с координатами последней запомненной представлением позиции мыши в пределах области объекта;
- lastScenePos () - возвращает экземпляр класса QPointF с координатами последней запомненной представлением позиции мыши в пределах сцены;
- lastScreenPos () - возвращает экземпляр класса QPoint с координатами последней запомненной представлением позиции мыши в пределах экрана;
- buttonDownPos (<Kнопка>) - возвращает экземпляр класса QPointF с координатами щелчка указанной кнопки мыши в пределах области объекта;
- buttonDownScenePos(<Kнопка>) - возвращает экземпляр класса QPointF с координатами щелчка указанной кнопки мыши в пределах сцены;
- buttonDownScreenPos (<Kнопка>) - возвращает экземпляр класса QPoint с координатами щелчка указанной кнопки мыши в пределах экрана;
- button () - возвращает обозначение кнопки мыши, нажатие которой вызвало событие;
- buttons () - возвращает комбинацию обозначений всех кнопок мыши, одновременное нажатие которых вызвало событие;
- modifiers () - возвращает комбинацию обозначений всех клавиш-модификаторов (Shift, Ctrl, Alt и др.), что были нажаты вместе с кнопкой мыши.
По умолчанию событие мыши перехватывает объект, над которым произведен щелчок мышью. Чтобы перехватывать нажатие и отпускание мыши вне объекта, следует захватить мышь с
помощью метода grabMouse() класса QGraphicsItem. Освободить захваченную ранее мышь позволяет метод ungrabMouse(). Получить ссылку на объект,
захвативший мышь, можно с помощью метода mouseGrabberItem() класса QGraphicsScene.
Для обработки прочих событий мыши нужно наследовать класс, реализующий графический объект, и переопределить следующие методы:
- hoverEnterEvent (self, <event>) - вызывается при наведении указателя мыши на область объекта. Через параметр <event>
доступен экземпляр класса QGraphicsSceneHoverEvent;
- hoverLeaveEvent (self, <event>) - вызывается, когда указатель мыши покидает область
объекта. Через параметр <event> доступен экземпляр класса QGraphicsSceneHoverEvent;
- hoverMoveEvent (self, <event>) - вызывается при перемещении указателя мыши внутри области объекта. Через параметр <event> доступен экземпляр класса QGraphicsSceneHoverEvent;
- wheelEvent (self, <event>) - вызывается при повороте колесика мыши при нахождении указателя мыши над объектом. Чтобы обрабатывать событие, в любом случае следует захватить мышь.
Через параметр <event> доступен экземпляр класса QGraphiсsSceneWheelEvent.
Следует учитывать, что методы hoverEnterEvent(), hoverLeaveEvent() и hoverMoveEvent() будут вызваны только в том случае, если обработка этих событий разрешена.
Чтобы разрешить обработку событий перемещения мыши, следует вызвать метод setAcceptHoverEvents(<Флаг>) класса QGraphicsItem и передать ему значение
True. Значение False запрещает обработку событий перемещения указателя. Получить текущее состояние позволяет метод acceptHoverEvents().
Класс QGraphicsSceneHoverEvent наследует все методы классов QGraphicsSceneEvent и QEvent и добавляет поддержку своих методов:
- pos () - возвращает экземпляр класса QPointF с координатами указателя мыши в пределах области объекта;
- scenePos () - возвращает экземпляр класса QPointF с координатами указателя мыши в пределах сцены;
- screenPos () - возвращает экземпляр класса QPoint с координатами указателя мыши в пределах экрана;
- lastPost () - возвращает экземпляр класса QPointF с координатами последней запомненной представлением позиции мыши в пределах области объекта;
- lastScenePos () - возвращает экземпляр класса QPointF с координатами последней запомненной представлением позиции мыши в пределах сцены;
- lastScreenPos () - возвращает экземпляр класса QPoint с координатами последней запомненной представлением позиции мыши в пределах экрана;
- modifiers () - возвращает комбинацию обозначений всех клавиш-модификаторов (Shift, Ctrl, Alt и др.), что были нажаты одновременно с перемещением мыши.
Класс QGraphicsSceneWheelEvent наследует все методы из классов QGraphicsSceneEvent и QEvent и добавляет поддержку следующих методов:
- delta () - возвращает расстояние поворота колесика, измеряемое в 1/8°. Положительное значение означает, что колесико поворачивалось в направлении от пользователя, отрицательное - к пользователю;
- orientation () - возвращает направление вращения колесика в виде значения одного из следующих атрибутов класса QtCore.Qt:
- Horizontal (или l) - по горизонтали;
- Vertical (или 2) - по вертикали;
- pos () - возвращает экземпляр класса QPointF с координатами указателя мыши в пределах области объекта;
- scenePost () - возвращает экземпляр класса QPointF с координатами указателя мыши в пределах сцены;
- screenPos () - возвращает экземпляр класса QPoint с координатами указателя мыши в пределах экрана;
- buttons () - возвращает комбинацию обозначений всех кнопок мыши, нажатых одновременно с вращением колесика;
- modifiers () - возвращает комбинацию обозначений всех клавиш-модификаторов (Shift, Ctrl, Alt и др.), что были нажаты одновременно с вращением колесика.
На следующем шаге мы рассмотрим обработку перетаскивания и сброса.
Предыдущий шаг
Содержание
Следующий шаг