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

    На этом шаге мы перечислим методы, используемые для рисования линий и фигур.

    После захвата контекста рисования следует установить перо и кисть. С помощью пера производится рисование точек, линий и контуров фигур, а с помощью кисти - заполнение фона фигур. Установить перо позволяет метод setPen() класса QPainter. Форматы метода:

  setPen(<QPen>) 
  setPen(<QColor>) 
  setPen(<Стиль пера>)

    Для установки кисти предназначен метод setBrush(). Форматы метода:

  setBrush(<QBrush>) 
  setBrush(<Стиль кисти>)

    Устанавливать перо или кисть необходимо перед каждой операцией рисования, требующей изменения цвета или стиля. Если перо или кисть не установлены, будут использоваться объекты с настройками по умолчанию. После установки пера и кисти можно приступать к рисованию точек, линий, фигур, текста и др.

    Для рисования точек, линий и фигур класс QPainter предоставляет следующие наиболее часто употребляемые методы (полный их список доступен на странице https://doc.qt.io/qt-5/qpainter.html):

    При выводе некоторых фигур (например, эллипса) контур может отображаться в виде "лесенки". Чтобы сгладить контуры фигур, следует вызвать метод setRenderHint() и передать ему в качестве единственного параметра атрибут Antialiasing класса QPainter. Пример:

  painter.setRenderHint(QtGui.QPainter.Antialiasing)

    В заключение приведем пример программы, выводящей графическую информацию, снабженную небольшими комментариями (программа взята отсюда: https://pythonworld.ru/gui/pyqt5-painting.html). Как видно из нее, все методы рисования вызываются из метода paintEvent() и располагаются между методами begin() и end() объекта класса QPainter().

import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QBrush

class Example(QWidget):
    def __init__(self):
        # super() - запуск конструктора-родителя
        super().__init__()
        self.initUI()
    # Главный метод
    def initUI(self):
        self.setGeometry(300, 300, 350, 100)
        self.setWindowTitle('Прямоугольники')
        self.show()

    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp) # Рисование фигур
        qp.end()

    def drawRectangles(self, qp):
        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col) # Установка карандаша

        qp.setBrush(QColor(200, 0, 0)) # Установка кисти
        qp.drawRect(10, 15, 90, 60) # Рисование прямоугольника

        qp.setBrush(QColor(255, 80, 0, 160))
        qp.drawRect(130, 15, 90, 60)

        qp.setBrush(QColor(25, 0, 90, 200))
        qp.drawRect(250, 15, 90, 60)


app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Архив с файлом можно взять здесь.

    Результат работы приложения изображен на рисунке 1.


Рис.1. Результат работы приложения

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




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