На этом шаге мы приведем общие сведения об этом классе.
Класс 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 - в противном случае.
На следующем шаге мы рассмотрим рисование линий и фигур.