Шаг 189.
Библиотека PyQt5.
Работа с графикой. Класс QPainter. Вывод текста

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

    Вывести текст позволяет метод drawText() класса QPainter. Форматы метода:

  drawText(<X>, <Y>, <Текст>)
  drawText(<QPoint>, <Текст>)
  drawText(<QPointF>, <Текст>)
  drawText(<X>, <Y>, <Ширина>, <Высота>, <Флаги>, <Текст>)
  drawText(<QRect>, <Флаги>, <Текст>)
  drawText(<QRectF>, <Флаги>, <Текст>)
  drawText(<QRectF>, <Текст>[, option=QTextOption()])

    Первые три формата метода выводят текст, начиная с указанных координат.

    Следующие три формата выводят текст в указанную прямоугольную область. При этом текст, который не помещается в эту область, будет обрезан, если не указан флаг TextDontClip. Методы возвращают экземпляр класса QRect (QRectF для шестого формата) с координатами и размерами прямоугольника, в который вписан текст. В параметре <Флаги> через оператор | указываются атрибуты AlignLeft, AlignRight, AlignVCenter, AlignTop, AlignBottom, AlignVCenter или AlignCenter класса QtCore.Qt, задающие выравнивание текста внутри прямоугольной области, а также следующие атрибуты:

    Седьмой формат метода drawText() также выводит текст в указанную прямоугольную область, но выравнивание текста и другие опции задаются с помощью экземпляра класса QTextOption. Например, с помощью этого класса можно отобразить непечатаемые символы (символ пробела, табуляцию и др.).

    Получить координаты и размеры прямоугольника, в который вписывается текст, позволяет метод boundingRect(). Форматы метода:

boundingRect(<X>, <Y>, <Ширина>, <Высота>, <Флаги>, <Текст>)
boundingRect(<QRect>, <Флаги>, <Текст>)
boundingRect(<QRectF>, <Флаги>, <Текст>)
boundingRect(<QRectF>, <Текст>[, option=QTextOption()])

    Первые два формата метода boundingRect() возвращают экземпляр класса QRect, а последние два - экземпляр класса QRectF.

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

  painter.setRenderHint(QtGui.QPainter.TextAntialiasing)

    Проиллюстрируем использование этого метода. Дополним приложение из предыдущего шага, организовов в нем выпод подписей под каждым прямоугольником (добавленный код отмечен комментариями).

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) # Рисование фигур

        # ======== Начало вставки ===============
        # Установим новое перо
        col = QColor(0, 0, 0) # Черный цвет
        qp.setPen(col) # Установка пера
        qp.drawText(10, 90, '1-й прямоугольник')
        qp.drawText(130, 90, '2-й прямоугольник')
        qp.drawText(250, 90, '3-й прямоугольник')
        # ========= Конец вставки ================
        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. Результат работы приложения

    На следующем шаге мы рассмотрим вывод изображения.




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