На этом шаге мы приведем общие сведения по работе с графикой.
Все компоненты, которые мы рассматривали в предыдущих шага, на самом деле нарисованы. То есть, каждый раз, когда компонент становится видимым (в первый раз, при отображении части компонента, ранее перекрытой другим окном, или после изменения его параметров), вызывается метод paintEvent() (см. 58 шаг). Вызвать событие перерисовки компонента можно и искусственно - с помощью методов repaint() и update() класса QWidget. Внутри метода paintEvent() выполняется рисование компонента с помощью методов класса QPainter.
Класс QPainter поддерживает все необходимые средства, позволяющие выполнять рисование геометрических фигур и вывод текста на поверхности, которая реализуется классом QPaintDevice. Класс QWidget наследует класс QPaintDevice. В свою очередь класс QWidget наследуют все компоненты, поэтому мы можем рисовать на поверхности любого компонента. Класс QPaintDevice наследуют также классы QPicture, QPixmap, QImage, QPagedPaintDevice и некоторые другие.
Класс QPicture позволяет сохранить команды рисования в метафайл, а затем считать их из файла и воспроизвести на какой-либо поверхности. Классы QPixmap и QImage позволяют обрабатывать изображения. Основные методы этих классов мы рассмотрим в следующих шагах.
Класс QPagedPaintDevice является базовым для классов QPrinter (позволяет выводить документы на печать) и QPdfWriter (используется для экспорта документов в PDF-файлы). Мы рассмотрим их позже.
Все описанные в следующих шагах классы объявлены в модуле QtGui, если не указано обратное.
Библиотека PyQt5 также позволяет работать с SVG-графикой и включает в свой состав поддержку технологии OpenGL, предназначенной для обработки двумерной и трехмерной графики. Рассмотрение этих не включено в данные шаги, поэтому за подробной информацией о них вам следует обратиться к соответствующей документации.
На следующем шаге мы рассмотрим вспомогательные классы.