Шаг 70.
Библиотека PyQt5. Обработка сигналов и событий. События мыши. Изменение внешнего вида указателя мыши
На этом шаге мы рассмотрим методы, позволяющие изменить внешний вид курсора.
Для изменения внешнего вида указателя мыши при вхождении его в область компонента предназначены следующие методы класса QWidget:
- setCursor (<Курсор>) - задает внешний вид указателя мыши для компонента. В качестве параметра указывается экземпляр класса QCursor или следующие атрибуты
из класса Qtcore.Qt:
- ArrowCursor - стандартная стрелка,
- UpArrowCursor - стрелка, направленная вверх,
- CrossCursor - крестообразный указатель,
- WaitCursor - песочные часы,
- IBeamCursor - I-образный указатель,
- SizeVerCursor - стрелки, направленные вверх и вниз,
- SizeHorCursor - стрелки, направленные влево и вправо,
- SizeBDiagCursor - стрелки, направленные в правый верхний угол и левый нижний угол,
- SizeFDiagCursor - стрелки, направленные в левый верхний угол и правый нижний угол,
- SizeAllCursor - стрелки, направленные вверх, вниз, влево и вправо,
- SplitVCursor - указатель изменения высоты,
- SplitHCursor - указатель изменения ширины,
- PointingHandCursor - указатель в виде руки,
- ForbiddenCursor - перечеркнутый круг,
- OpenHandCursor - разжатая рука,
- ClosedHandCursor - сжатая рука,
- WhatsThisCursor - стрелка с вопросительным знаком,
- BusyCursor - стрелка с песочными часами.
Пример:
self.setCursor(QtCore.Qt.WaitCursor)
- unsetCursor () - отменяет установку указателя для компонента. В результате внешний вид указателя мыши будет наследоваться от родительского компонента;
- cursor () - возвращает экземпляр класса QCursor, представляющий текущий указатель.
Управлять видом указателя для всего приложения сразу можно с помощью следующих статических методов из класса QApplication:
- setOverrideCursor (<Курсор>) - задает внешний вид указателя мыши для всего приложения. В качестве параметра указывается экземпляр класса QCursor или один из
ранее перечисленных специальных атрибутов класса QtCore.Qt. Для отмены установки необходимо вызвать метод restoreOverrideCursor();
- restoreOverrideCursor () - отменяет изменение внешнего вида указателя мыши для всего приложения. Пример:
QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
# Выполняем длительную операцию
QtWidgets.QApplication.restoreOverrideCursor()
- changeOverrideCursor (<Курсор>) - изменяет внешний вид указателя мыши для всего приложения. Если до вызова этого метода не вызывался метод setOverrideCursor(),
значение будет проигнорировано. В качестве параметра указывается экземпляр класса QCursor или один из специальных атрибутов класса QtCore.Qt;
- overrideCursor () - возвращает экземпляр класса QCursor, представляющий текущий указатель, или значение None, если таковой не был изменен.
Изменять внешний вид указателя мыши для всего приложения принято на небольшой промежуток времени - обычно на время выполнения какой-либо операции, в процессе которой приложение не
может нормально реагировать на действия пользователя. Чтобы информировать об этом пользователя, указатель принято выводить в виде песочных часов (атрибут WaitCursor) или стрелки с
песочными часами (атрибут BusyCursor).
Метод setOverrideCursor() может быть вызван несколько раз. В этом случае курсоры помещаются в стек. Каждый вызов метода restoreOverrideCursor() удаляет последний курсор,
добавленный в стек. Для нормальной работы приложения необходимо вызывать методы setOverrideCursor() и restoreOverrideCursor() одинаковое количество раз.
Класс QCursor позволяет создать объект курсора с изображением любой формы. Чтобы загрузить изображение, следует передать путь к файлу конструктору класса QPixmap. Для
создания объекта курсора необходимо передать конструктору класса QCursor в первом параметре экземпляр класса QPixmap, а во втором и третьем параметрах - координаты "горячей"
точки будущего курсора. Пример создания и установки пользовательского курсора:
self.setCursor(QtGui.QCursor(QtGui.QPixmap("cursor.png"), 0, 0))
Примечание.
"Горячая точка" курсора - пиксель, по которому определяется позиция курсора. Например, если используется курсор в виде перекрестия, то в качестве "горячей точки" можно
использовать точку пересечения линий, образующих перекрестие. Если же используется курсор в виде стрелки, то в качестве "горячей точки" можно взять координаты острия стрелки.
Класс QCursor поддерживает также два статических метода:
- pos () - возвращает экземпляр класса QPoint с координатами указателя мыши относительно экрана:
р = QtGui.QCursor.pos()
print ( p.x(), p.y() )
- setPos () - позволяет задать позицию указателя мыши. Метод имеет два формата: setPos(<X>, <Y>) и setPos(<QPoint>).
Со следующего шага мы начнем рассматривать технологию drag & drop.
Предыдущий шаг
Содержание
Следующий шаг