ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 875
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
562
Часть II. Библиотека PyQt 5 24.1.4. Класс QLine: линия
Класс
QLine из модуля
QtCore описывает координаты линии. Форматы конструктора класса:
<Объект> = QLine()
<Объект> = QLine(
<Объект> = QLine(
Первый конструктор создает линию, имеющую неустановленные местоположение и разме- ры. Во втором и третьем конструкторах указываются координаты начальной и конечной точек в виде экземпляров класса
QPoint или целочисленных значений через запятую.
Класс
QLine поддерживает следующие основные методы (полный их список приведен на странице https://doc.qt.io/qt-5/qline.html):
isNull()
— возвращает значение
True
, если начальная или конечная точка не установле- ны, и
False
— в противном случае;
setPoints(
— задает координаты начальной и конечной точек в виде экземпляров класса
QPoint
;
setLine(
— задает координаты начальной и конечной точек в виде целочисленных значений через запятую;
setP1(
— задает координаты начальной точки;
setP2(
— задает координаты конечной точки;
p1()
— возвращает координаты (экземпляр класса
QPoint
) начальной точки;
p2()
— возвращает координаты (экземпляр класса
QPoint
) конечной точки;
center()
— возвращает координаты (экземпляр класса
QPoint
) центральной точки. Под- держка этого метода появилась в PyQt 5.8;
x1()
, y1()
, x2()
и y2()
— возвращают значения отдельных составляющих координат начальной и конечной точек в виде целых чисел;
dx()
— возвращает горизонтальную составляющую вектора линии;
dy()
— возвращает вертикальную составляющую вектора линии.
П
РИМЕЧАНИЕ
Класс QLine предназначен для работы с целыми числами. Чтобы работать с веществен- ными числами, необходимо использовать класс QLineF.
24.1.5. Класс QPolygon: многоугольник
Класс
QPolygon описывает координаты вершин многоугольника. Форматы конструктора класса:
<Объект> = QPolygon()
<Объект> = QPolygon(<Список с экземплярами класса QPoint>)
<Объект> = QPolygon(
<Объект> = QPolygon(<Количество вершин>)
<Объект> = QPolygon(
Первый конструктор создает пустой объект. Заполнить объект координатами вершин мож- но с помощью оператора
<<
. Вот пример добавления координат вершин треугольника:
Глава 24. Работа с графикой
563 polygon = QtGui.QPolygon() polygon << QtCore.QPoint(20, 50) << QtCore.QPoint(280, 50) polygon << QtCore.QPoint(150, 280)
Во втором конструкторе указывается список с экземплярами класса
QPoint
, которые задают координаты отдельных вершин: polygon = QtGui.QPolygon([QtCore.QPoint(20, 50), QtCore.QPoint(280, 50),
QtCore.QPoint(150, 280)])
Третий конструктор создает многоугольник на основе экземпляра класса
QRect
. Если пара- метр closed имеет значение
False
, то будут созданы четыре вершины, а если значение
True
— то пять вершин.
В четвертом конструкторе можно указать количество вершин, а затем задать координаты путем присваивания значения по индексу: polygon = QtGui.QPolygon(3) polygon[0] = QtCore.QPoint(20, 50) polygon[1] = QtCore.QPoint(280, 50) polygon[2] = QtCore.QPoint(150, 280)
Пятый конструктор создает новый объект на основе другого объекта.
Класс
QPolygon поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qpolygon.html):
setPoints()
— устанавливает координаты вершин. Ранее установленные значения уда- ляются. Форматы метода: setPoints(<Список с координатами>) setPoints(
Пример указания значений: polygon = QtGui.QPolygon() polygon.setPoints([20,50, 280,50, 150,280])
prepend(
— добавляет новую вершину в начало объекта;
append(
— добавляет новую вершину в конец объекта. Добавить вершину можно также с помощью операторов
<<
и
+=
;
insert(<Индекс>,
— добавляет новую вершину в указанную позицию;
setPoint()
— задает координаты для вершины с указанным индексом. Форматы метода: setPoint(<Индекс>,
Можно также задать координаты путем присваивания значения по индексу: polygon = QtGui.QPolygon(3) polygon.setPoint(0, QtCore.QPoint(20, 50)) polygon.setPoint(1, 280, 50) polygon[2] = QtCore.QPoint(150, 280)
point(<Индекс>)
— возвращает экземпляр класса
QPoint с координатами вершины, ин- декс которой указан в параметре. Получить значение можно также с помощью операции доступа по индексу:
564
Часть II. Библиотека PyQt 5 polygon = QtGui.QPolygon([20,50, 280,50, 150,280]) print(polygon.point(0)) # PyQt5.QtCore.QPoint(20, 50) print(polygon[1]) # PyQt5.QtCore.QPoint(280, 50)
remove(<Индекс>[, <Количество>])
— удаляет указанное количество вершин, начиная с индекса
<Индекс>
. Если второй параметр не указан, удаляется одна вершина. Удалить вершину можно также с помощью оператора del по индексу или срезу;
clear()
— удаляет все вершины;
size()
и count([
— возвращают количество вершин. Если в методе count()
указан параметр, возвращается только количество вершин с указанными координатами.
Получить количество вершин можно также с помощью функции len()
;
isEmpty()
— возвращает значение
True
, если объект пустой (многоугольник не содержит ни одной вершины), и
False
— в противном случае;
boundingRect()
— возвращает экземпляр класса
QRect с координатами и размерами пря- моугольной области, в которую вписан многоугольник.
П
РИМЕЧАНИЕ
Класс QPolygon предназначен для работы с целыми числами. Чтобы работать с вещест- венными числами, необходимо использовать класс QPolygonF.
24.1.6. Класс QFont: шрифт
Класс
QFont описывает характеристики шрифта. Форматы конструктора класса:
<Объект> = QFont()
<Объект> = QFont(<Название шрифта>[, pointSize=-1][, weight=-1][, italic=False])
<Объект> = QFont(
Первый конструктор создает объект шрифта с настройками, используемыми приложением по умолчанию. Установить шрифт приложения по умолчанию позволяет статический метод setFont()
класса
QApplication
Второй конструктор позволяет указать основные характеристики шрифта. В первом пара- метре указывается название шрифта или семейства в виде строки. Необязательный пара- метр pointSize задает размер шрифта. В параметре weight можно указать степень жирности шрифта: число от
0
до
99
или значение атрибута
Light
(
25
),
Normal
(
50
),
DemiBold
(
63
),
Bold
(
75
) или
Black
(
87
) класса
QFont
. Если в параметре italic указано значение
True
, шрифт будет курсивным.
Третий конструктор создает новый объект на основе другого объекта.
Класс
QFont поддерживает следующие методы (здесь приведены только основные — пол- ный их список можно найти по адресу https://doc.qt.io/qt-5/qfont.html):
setFamily(<Название шрифта>)
— задает название шрифта или семейства шрифтов;
family()
— возвращает название шрифта;
setPointSize(<Размер типа int>)
и setPointSizeF(<Размер типа float>)
— задают размер шрифта в пунктах;
pointSize()
— возвращает размер шрифта в пунктах в виде целого числа или значение
-1
, если размер шрифта был установлен в пикселах;
Глава 24. Работа с графикой
565
pointSizeF()
— возвращает размер шрифта в пунктах в виде вещественного числа или значение
-1
, если размер шрифта был установлен в пикселах;
setPixelSize(<Размер>)
— задает размер шрифта в пикселах;
pixelSize()
— возвращает размер шрифта в пикселах или
-1
, если размер шрифта был установлен в пунктах;
setWeight(<Жирность>)
— задает степень жирности шрифта (см. описание параметра weight во втором конструкторе класса
QFont
);
weight()
— возвращает степень жирности шрифта;
setBold(<Флаг>)
— если в качестве параметра указано значение
True
, то жирность шрифта устанавливается равной значению атрибута
Bold
, а если
False
— то равной зна- чению атрибута
Normal класса
QFont
;
bold()
— возвращает значение
True
, если степень жирности шрифта больше значения атрибута
Normal класса
QFont
, и
False
— в противном случае;
setItalic(<Флаг>)
— если в качестве параметра указано значение
True
, шрифт будет курсивным, а если
False
— обычного начертания;
italic()
— возвращает значение
True
, если шрифт курсивный, и
False
— в противном случае;
setUnderline(<Флаг>)
— если в качестве параметра указано значение
True
, текст будет подчеркнутым, а если
False
— не подчеркнутым;
underline()
— возвращает значение
True
, если текст подчеркнут, и
False
— в против- ном случае;
setOverline(<Флаг>)
— если в качестве параметра указано значение
True
, над текстом будет выводиться черта;
overline()
— возвращает значение
True
, если над текстом будет выводиться черта, и
False
— в противном случае;
setStrikeOut(<Флаг>)
— если в качестве параметра указано значение
True
, текст будет зачеркнутым;
strikeOut()
— возвращает значение
True
, если текст будет зачеркнутым, и
False
— в противном случае.
Получить список всех доступных шрифтов позволяет метод families()
класса
QFontDatabase
. Метод возвращает список строк. Отметим, что перед его вызовом следует создать экземпляр класса
QApplication
, в противном случае мы получим ошибку испол- нения: from PyQt5 import QtGui, QtWidgets app = QtWidgets.QApplication(list()) fdb = QtGui.QFontDatabase() print(fdb.families())
Чтобы получить список доступных стилей для указанного шрифта, следует воспользоваться методом styles(<Название шрифта>)
класса
QFontDatabase
: print(fdb.styles("Arial"))
# ['Обычный', 'Полужирный', 'Полужирный Курсив', 'Курсив']
Получить допустимые размеры для указанного стиля можно с помощью метода smoothSizes(<Название шрифта>, <Стиль>)
класса
QFontDatabase
:
566
Часть II. Библиотека PyQt 5 print(fdb.smoothSizes("Arial", "Обычный"))
# [6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72]
Очень часто необходимо произвести выравнивание выводимого текста внутри некоторой области. Чтобы это сделать, нужно знать размеры области, в которую вписан текст. Полу- чить эти значения позволяют следующие методы класса
QFontMetrics
:
width(<Текст>[, length=-1])
— возвращает расстояние от начала текста
<Текст>
до по- зиции, в которой должен начаться другой текст. Параметр length позволяет ограничить количество символов;
height()
— возвращает высоту шрифта;
boundingRect(<Текст>)
— возвращает экземпляр класса
QRect с координатами и разме- рами прямоугольной области, в которую вписан текст.
Вот пример получения размеров области: font = QtGui.QFont("Tahoma", 16) fm = QtGui.QFontMetrics(font) print(fm.width("Строка")) # 67 print(fm.height()) # 25 print(fm.boundingRect("Строка")) # PyQt5.QtCore.QRect(0, -21, 65, 25)
Обратите внимание, что значения, возвращаемые методами width()
и
QRect.width()
, разли- чаются.
П
РИМЕЧАНИЕ
Класс QFontMetrics предназначен для работы с целыми числами. Чтобы работать с веще- ственными числами, необходимо использовать класс QFontMetricsF.
24.2. Класс QPainter
Класс
QPainter содержит все необходимые средства, позволяющие выполнять рисование геометрических фигур и вывод текста на поверхности, которая реализуется классом
QPaintDevice
. Класс
QPaintDevice наследуют классы
QWidget
,
QPicture
,
QPixmap
,
QImage
,
QPagedPaintDevice и некоторые другие. Таким образом, мы можем рисовать на поверхности любого компонента, на изображении или на печатаемой странице. Форматы конструктора класса:
<Объект> = QPainter()
<Объект> = QPainter(
Первый конструктор создает объект, который не подключен ни к одному устройству. Чтобы подключиться к устройству и захватить контекст рисования, необходимо вызвать метод begin(
и передать ему ссылку на экземпляр класса, являющегося наследни- ком класса
QPaintDevice
. Метод возвращает значение
True
, если контекст успешно захва- чен, и
False
— в противном случае. В один момент времени только один объект может ри- совать на устройстве, поэтому после окончания рисования необходимо освободить контекст рисования с помощью метода end()
. С учетом сказанного код, позволяющий рисовать на компоненте, будет выглядеть так: def paintEvent(self, e):
# Компонент, на котором выполняется рисование, передается в параметре self painter = QtGui.QPainter() painter.begin(self)
Глава 24. Работа с графикой
567
# Здесь производим рисование на компоненте painter.end()
Второй конструктор принимает ссылку на экземпляр класса, являющегося наследником класса
QPaintDevice
, подключается к этому устройству и сразу захватывает контекст рисо- вания. Контекст рисования автоматически освобождается внутри деструктора класса
QPainter при уничтожении объекта. Так как объект автоматически уничтожается при выхо- де из метода paintEvent()
, то метод end()
можно и не вызывать.
Вот пример рисования на компоненте: def paintEvent(self, e): painter = QtGui.QPainter(self)
# Здесь производим рисование на компоненте
Проверить успешность захвата контекста рисования можно с помощью метода isActive()
: он возвращает значение
True
, если контекст захвачен, и
False
— в противном случае.
24.2.1. Рисование линий и фигур
После захвата контекста рисования следует установить перо и кисть. С помощью пера про- изводится рисование точек, линий и контуров фигур, а с помощью кисти — заполнение фона фигур. Установить перо позволяет метод setPen()
класса
QPainter
. Форматы метода: setPen(
Для установки кисти предназначен метод setBrush()
. Форматы метода: setBrush(
Устанавливать перо или кисть необходимо перед каждой операцией рисования, требующей изменения цвета или стиля. Если перо или кисть не установлены, будут использоваться объекты с настройками по умолчанию. После установки пера и кисти можно приступать к рисованию точек, линий, фигур, текста и др.
Для рисования точек, линий и фигур класс
QPainter предоставляет следующие наиболее часто употребляемые методы (полный их список приведен на странице https://doc.qt.io/ qt-5/qpainter.html):
drawPoint()
— рисует точку. Форматы метода: drawPoint(
drawPoints()
— рисует несколько точек. Форматы метода: drawPoints(
drawLine()
— рисует линию. Форматы метода: drawLine(
568
Часть II. Библиотека PyQt 5 drawLine(
drawLines()
— рисует несколько отдельных линий. Форматы метода: drawLines(
drawPolyline()
— рисует несколько линий, которые соединяют указанные точки. Пер- вая и последняя точки не соединяются. Форматы метода: drawPolyline(
drawRect()
— рисует прямоугольник с границей и заливкой. Чтобы убрать границу, сле- дует использовать перо со стилем
NoPen
, а чтобы убрать заливку — кисть со стилем
NoBrush
. Форматы метода: drawRect(
fillRect()
— рисует прямоугольник с заливкой без границы. Форматы метода: fillRect(
<Заливка>
может быть задана экземплярами классов
,
в виде стиля кисти или атрибута цвета;
drawRoundedRect()
— рисует прямоугольник с границей, заливкой и скругленными краями. Форматы метода: drawRoundedRect(
<Скругление по горизонтали>, <Скругление по вертикали>[, mode = Qt::AbsoluteSize]) drawRoundedRect(
<Скругление по вертикали>[, mode = Qt::AbsoluteSize]) drawRoundedRect(
<Скругление по вертикали>[, mode = Qt::AbsoluteSize])
Параметры
<Скругление по горизонтали>
и
<Скругление по вертикали>
задают радиусы скругления углов по горизонтали и вертикали. Необязательный параметр mode указыва- ет, в каких единицах измеряются радиусы скругления углов, и задается одним из сле- дующих атрибутов класса
QtCore.Qt
:
•
AbsoluteSize
—
0
— радиусы указываются в пикселах;
•
RelativeSize
—
1
— радиусы указываются в процентах от соответствующего разме- ра рисуемого прямоугольника;
Глава 24. Работа с графикой
569
drawPolygon()
— рисует многоугольник с границей и заливкой. Форматы метода: drawPolygon(
Необязательный параметр fillRule задает алгоритм определения, находится ли какая- либо точка внутри нарисованного прямоугольника или вне его. В качестве его значения указывается атрибут
OddEvenFill
(
0
) или
WindingFill
(
1
) класса
QtCore.Qt
;
drawEllipse()
— рисует эллипс с границей и заливкой. Форматы метода: drawEllipse(
1 ... 49 50 51 52 53 54 55 56 ... 83