На этом шаге мы рассмотрим класс, используемый для вывода текста.
Вывести текст позволяет метод 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. Результат работы приложения
На следующем шаге мы рассмотрим вывод изображения.