Шаг 187.
Библиотека PyQt5.
Работа с графикой. Класс QPainter

    На этом шаге мы приведем общие сведения об этом классе.

    Класс QPainter содержит все необходимые средства, позволяющие выполнять рисование геометрических фигур и вывод текста на поверхности, которая реализуется классом QPaintDevice. Класс QPaintDevice наследуют классы QWidget, QPicture, QPixmap, QImage, QPagedPaintDevice и некоторые другие. Таким образом, мы можем рисовать на поверхности любого компонента, на изображении или на печатаемой странице. Форматы конструктора класса:

  <Объект> = QPainter()
  <Объект> = QPainter(<QPaintDevice>)

    Первый конструктор создает объект, который не подключен ни к одному устройству. Чтобы подключиться к устройству и захватить контекст рисования, необходимо вызвать метод begin(<QPaintDevice>) и передать ему ссылку на экземпляр класса, являющегося наследником класса QPaintDevice. Метод возвращает значение True, если контекст успешно захвачен, и False - в противном случае. В один момент времени только один объект может рисовать на устройстве, поэтому после окончания рисования необходимо освободить контекст рисования с помощью метода end(). С учетом сказанного код, позволяющий рисовать на компоненте, будет выглядеть так:

def paintEvent(self, е):
     # Компонент, на котором выполняется рисование, передается в параметре self
     painter = QtGui.QPainter()
     painter.begin(self)
     # Здесь производим рисование на компоненте
     painter.end()

    Второй конструктор принимает ссылку на экземпляр класса, являющегося наследником класса QPaintDevice, подключается к этому устройству и сразу захватывает контекст рисования. Контекст рисования автоматически освобождается внутри деструктора класса QPainter при уничтожении объекта. Так как объект автоматически уничтожается при выходе из метода paintEvent(), то метод end() можно и не вызывать. Пример рисования на компоненте:

def paintEvent(self, е):
     painter = QtGui.QPainter(self)
     # Здесь производим рисование на компоненте

    Проверить успешность захвата контекста рисования можно с помощью метода isActive(): он возвращает значение True, если контекст захвачен, и False - в противном случае.

    На следующем шаге мы рассмотрим рисование линий и фигур.




Предыдущий шаг Содержание Следующий шаг