Шаг 66.
Библиотека PyQt5. Обработка сигналов и событий. События мыши. Нажатие и отпускание кнопки мыши
На этом шаге мы рассмотрим методы для обработки этих событий.
При нажатии и отпускании кнопки мыши вызываются следующие методы:
- mousePressEvent (self, <event>) - вызывается при нажатии кнопки мыши;
- mouseReleaseEvent (self, <event>) - вызывается при отпускании ранее нажатой кнопки мыши;
- mouseDoubleClickEvent (self, <event>) - вызывается при двойном щелчке мышью в области компонента. Следует учитывать, что двойному щелчку предшествуют другие
события. Последовательность событий при двойном щелчке выглядит так:
MouseButtonPress
MouseButtonRelease
MouseButtonDblClick
MouseButtonPress
MouseButtonRelease
Задать интервал двойного щелчка позволяет метод setDoubleClickInterval() класса QApplication, а получить его текущее значение - метод doubleClickInterval() того же класса.
Через параметр <event> доступен экземпляр класса QMouseEvent, хранящий дополнительную информацию о событии. Он поддерживает такие методы:
- х () и у () - возвращают координаты по осям X и Y соответственно в пределах области компонента;
- pos () - возвращает экземпляр класса QPoint с целочисленными координатами в пределах области компонента;
- localPos () - возвращает экземпляр класса QPointF с вещественными координатами в пределах области компонента;
- globalX () и globalY () - возвращают координаты по осям X и Y соответственно в пределах экрана;
- globalPos () - возвращает экземпляр класса QPoint с координатами в пределах экрана;
- windowPos () - возвращает экземпляр класса QPointF с вещественными координатами в пределах окна;
- screenPos () - возвращает экземпляр класса QPointF с вещественными координатами в пределах экрана;
- button () - позволяет определить, щелчок какой кнопкой мыши вызвал событие. Возвращает значение одного из следующих атрибутов класса QtCore.Qt (здесь перечислены
не все атрибуты, полный их список приведен на странице https://doc.qt.io/qt-5/qt.html#MouseButton-enum):
- buttons () - позволяет определить все кнопки, которые нажаты одновременно. Возвращает комбинацию упомянутых ранее атрибутов. Пример определения нажатой кнопки мыши:
if e.buttons() & QtCore.Qt.LeftButton:
print("Нажата левая кнопка мыши")
- modifiers () - позволяет определить, какие клавиши-модификаторы (Shift, Ctrl, Alt и другие) были нажаты вместе с кнопкой мыши. Возможные значения мы уже рассматривали
на 64 шаге;
- timestamp () - возвращает в виде числа отметку системного времени, в которое возникло событие.
Если событие было успешно обработано, следует вызвать метод accept() объекта события. Чтобы родительский компонент мог получить событие, вместо метода accept() нужно вызвать метод ignore().
Если у компонента атрибут WA_NoMousePropagation класса Qtcore.Qt установлен в True, событие мыши не будет передаваться родительскому компоненту. Значение атрибута можно
изменить с помощью метода setAttribute(), вызванного у этого компонента:
button.setAttribute(QtCore.Qt.WA_NoMousePropagation, True)
По умолчанию событие мыши перехватывает компонент, над которым был произведен щелчок мышью. Чтобы перехватывать нажатие и отпускание мыши вне компонента, следует захватить мышь
вызовом метода grabMouse(). Освободить захваченную ранее мышь позволяет метод releaseMouse().
На следующем шаге мы рассмотрим перемещение указателя мыши.
Предыдущий шаг
Содержание
Следующий шаг