Главная страница

ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница55 из 83
1   ...   51   52   53   54   55   56   57   58   ...   83
False
— в противном случае;
 save(<Путь к файлу>[, format=None][, quality=-1])
— сохраняет изображение в файл.
В первом параметре указывается абсолютный или относительный путь к файлу. Во вто- ром параметре можно задать формат файла в виде строки — если он не указан, формат будет определен по расширению файла. Необязательный параметр quality позволяет за- дать качество изображения. Можно передать значение в диапазоне от
0
до
100
, значение
-1
указывает качество по умолчанию. Метод возвращает значение
True
, если изображе- ние успешно сохранено, и
False
— в противном случае;
 convertFromImage([, flags=AutoColor])
— преобразует экземпляр класса
QImage в экземпляр класса
QPixmap
. Метод возвращает значение
True
, если изображение успешно преобразовано, и
False
— в противном случае;
 fromImage([, flags=AutoColor])
— преобразует экземпляр класса
QImage в эк- земпляр класса
QPixmap
, который и возвращает. Метод является статическим;
 toImage()
— преобразует экземпляр класса
QPixmap в экземпляр класса
QImage и возвра- щает его;
 fill([color=white])
— производит заливку изображения указанным цветом;
 width()
— возвращает ширину изображения;
 height()
— возвращает высоту изображения;
 size()
— возвращает экземпляр класса
QSize с размерами изображения;
 rect()
— возвращает экземпляр класса
QRect с координатами и размерами прямоуголь- ной области, ограничивающей изображение;
 depth()
— возвращает глубину цвета;
 isQBitmap()
— возвращает значение
True
, если глубина цвета равна одному биту (т. е. это монохромное изображение), и
False
— в противном случае;
 createMaskFromColor()
— создает на основе изображения маску в виде экземпляра класса
QBitmap и возвращает ее. Первый параметр задает цвет — области, закрашенные этим цветом, будут на маске либо прозрачными, либо не- прозрачными. Необязательный параметр mode задает режим создания маски в виде сле- дующих атрибутов класса
QtCore.Qt
:

MaskInColor

0
— области, закрашенные указанным цветом, будут прозрачными;

MaskOutColor

1
— области, закрашенные указанным цветом, будут непрозрачными;
 setMask()
— устанавливает маску;
 mask()
— возвращает экземпляр класса
QBitmap с маской изображения;
 copy()
— возвращает экземпляр класса
QPixmap с фрагментом изображения. Если пара- метр rect не указан, изображение копируется полностью. Форматы метода: copy([rect=QRect()]) copy(, , <Ширина>, <Высота>)
 scaled()
— изменяет размер изображения и возвращает результат в виде экземпляра класса
QPixmap
. Исходное изображение не изменяется. Форматы метода:

Глава 24. Работа с графикой
577 scaled(<Ширина>, <Высота>[, aspectRatioMode=IgnoreAspectRatio][, transformMode=FastTransformation]) scaled([, aspectRatioMode=IgnoreAspectRatio][, transformMode=FastTransformation])
В необязательном параметре aspectRatioMode могут быть указаны следующие атрибуты класса
QtCore.Qt
:

IgnoreAspectRatio

0
— изменяет размеры без сохранения пропорций сторон;

KeepAspectRatio

1
— изменяет размеры с сохранением пропорций сторон. При этом часть области нового изображения может оказаться незаполненной;

KeepAspectRatioByExpanding

2
— изменяет размеры с сохранением пропорций сторон. При этом часть нового изображения может выйти за пределы его области.
В необязательном параметре transformMode могут быть указаны следующие атрибуты из класса
QtCore.Qt
:

FastTransformation

0
— сглаживание выключено;

SmoothTransformation

1
— сглаживание включено;
 scaledToWidth(<Ширина>[, mode=FastTransformation])
— изменяет ширину изображе- ния и возвращает результат в виде экземпляра класса
QPixmap
. Высота изображения из- меняется пропорционально. Исходное изображение не изменяется. Параметр mode анало- гичен параметру transformMode в методе scaled()
;
 scaledToHeight(<Высота>[, mode=FastTransformation])
— изменяет высоту изображе- ния и возвращает результат в виде экземпляра класса
QPixmap
. Ширина изображения из- меняется пропорционально. Исходное изображение не изменяется. Параметр mode анало- гичен параметру transformMode в методе scaled()
;
 transformed([, mode=FastTransformation])
— производит трансформацию изображения (например, поворот) и возвращает результат в виде экземпляра класса
QPixmap
. Исходное изображение не изменяется. Трансформация задается с помощью эк- земпляра класса
QTransform
. Параметр mode аналогичен параметру transformMode в ме- тоде scaled()
;
 swap()
— заменяет текущее изображение указанным в параметре;
 hasAlpha()
— возвращает
True
, если изображение имеет прозрачные области, и
False
— в противном случае;
 hasAlphaChannel()
— возвращает
True
, если формат изображения поддерживает про- зрачность, и
False
— в противном случае.
24.3.2. Класс QBitmap
Класс
QBitmap предназначен для работы в контекстно-зависимом представлении с моно- хромными изображениями, имеющими глубину цвета, равную одному биту. Наиболее часто класс
QBitmap используется для создания масок изображений. Иерархия наследования:
QPaintDevice — QPixmap — QBitmap
Поскольку класс
QBitmap наследует класс
QPaintDevice
, мы можем использовать его как поверхность для рисования. Цвет пера и кисти задается атрибутами color0
(прозрачный цвет) и color1
(непрозрачный цвет) класса
QtCore.Qt
. Вывести изображение позволяет ме- тод drawPixmap()
класса
QPainter
(см. разд. 24.2.3).

578
Часть II. Библиотека PyQt 5
Форматы конструктора класса:
<Объект> = QBitmap()
<Объект> = QBitmap(<Ширина>, <Высота>)
<Объект> = QBitmap()
<Объект> = QBitmap(<Путь к файлу>[, format=None])
<Объект> = QBitmap()
<Объект> = QBitmap()
Класс
QBitmap наследует все методы класса
QPixmap и определяет следующие дополнитель- ные методы (здесь приведены только нас интересующие — полный их список можно найти на странице https://doc.qt.io/qt-5/qbitmap.html):
 fromImage([, flags=AutoColor])
— преобразует экземпляр класса
QImage в эк- земпляр класса
QBitmap и возвращает его. Метод является статическим;
 transformed()
— производит трансформацию изображения (например, по- ворот) и возвращает экземпляр класса
QBitmap
. Исходное изображение не изменяется.
Трансформация задается экземпляром класса
QTransform
;
 clear()
— очищает изображение, устанавливая все биты изображения в значение color0 24.3.3. Класс QImage
Класс
QImage предназначен для работы с изображениями в контекстно-независимом пред- ставлении. Иерархия наследования:
QPaintDevice — QImage
Поскольку класс
QImage наследует класс
QPaintDevice
, мы можем использовать его как по- верхность для рисования. Однако следует учитывать, что не на всех форматах изображения можно рисовать,
— для рисования лучше использовать изображение формата
Format_ARGB32_Premultiplied
. Вывести изображение позволяет метод drawImage()
класса
QPainter
(см. разд. 24.2.3).
Форматы конструктора класса:
<Объект> = QImage()
<Объект> = QImage(<Ширина>, <Высота>, <Формат>)
<Объект> = QImage(, <Формат>)
<Объект> = QImage(<Путь к файлу>[, <Тип изображения>])
<Объект> = QImage()
Первый конструктор создает пустой объект изображения. Второй и третий конструкторы позволяют указать размеры изображения — если таковые равны нулю, будет создан пустой объект. Четвертый конструктор предназначен для загрузки изображения из файла. Во вто- ром параметре указывается тип изображения в виде строки — если он не указан, формат будет определен по расширению загружаемого файла. Пятый конструктор создает копию изображения.
В параметре
<Формат>
можно указать следующие атрибуты класса
QImage
(здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-
5/qimage.html#Format-enum):

Format_Invalid

0
— неверный формат;

Format_Mono

1
— глубина цвета 1 бит;

Глава 24. Работа с графикой
579

Format_MonoLSB

2
— глубина цвета 1 бит;

Format_Indexed8

3
— глубина цвета 8 битов;

Format_RGB32

4
— RGB без альфа-канала, глубина цвета 32 бита;

Format_ARGB32

5
— RGB с альфа-каналом, глубина цвета 32 бита;

Format_ARGB32_Premultiplied

6
— RGB с альфа-каналом, глубина цвета 32 бита. Этот формат лучше использовать для рисования.
Класс
QImage поддерживает большое количество методов, из которых мы рассмотрим лишь основные (полный их список приведен на странице https://doc.qt.io/qt-5/qimage.html):
 isNull()
— возвращает значение
True
, если объект является пустым, и
False
— в про- тивном случае;
 load(<Путь к файлу>[, format=None])
— загружает изображение из файла. В первом параметре задается абсолютный или относительный путь к файлу. Во втором параметре указывается формат файла в виде строки — если он не указан, формат определяется по расширению файла. Метод возвращает значение
True
, если изображение успешно за- гружено, и
False
— в противном случае;
 loadFromData([, format=None])
— загружает изображение из экземпляра класса
QByteArray
. В первом параметре можно указать данные, имеющие тип bytes
. Во втором параметре указывается тип изображения в виде строки (например,
"PNG"
). Метод возвращает значение
True
, если изображение успешно загружено, и
False
— в против- ном случае;
 fromData([, format=None])
— загружает изображение из экземпляра класса
QByteArray
. В первом параметре можно указать данные, имеющие тип bytes
. Во втором параметре указывается тип изображения в виде строки (например,
"PNG"
). Метод воз- вращает экземпляр класса
QImage
. Метод является статическим;
 save(<Путь к файлу>[, format=None][, quality=-1])
— сохраняет изображение в файл.
В первом параметре указывается абсолютный или относительный путь к файлу. Во вто- ром параметре можно задать формат файла в виде строки — если он не указан, формат определяется по расширению файла. Необязательный параметр quality позволяет задать качество изображения. Можно передать значение в диапазоне от
0
до
100
; значение
-1
указывает качество по умолчанию. Метод возвращает значение
True
, если изображение успешно сохранено, и
False
— в противном случае;
 fill(<Цвет>)
— производит заливку изображения определенным цветом. В качестве параметра указывается атрибут цвета (например,
QtCore.Qt.white
), экземпляр класса
QColor или целочисленное значение цвета, получить которое позволяют методы rgb()
и rgba()
класса
QColor
: img.fill(QtCore.Qt.red) img.fill(QtGui.QColor("#ff0000")) img.fill(QtGui.QColor("#ff0000").rgb())
 width()
— возвращает ширину изображения;
 height()
— возвращает высоту изображения;
 size()
— возвращает экземпляр класса
QSize с размерами изображения;
 rect()
— возвращает экземпляр класса
QRect с координатами и размерами прямоуголь- ной области, ограничивающей изображение;

580
Часть II. Библиотека PyQt 5
 depth()
— возвращает глубину цвета;
 format()
— возвращает формат изображения (см. значения параметра
<Формат>
в конст- рукторе класса
QImage
);
 setPixel()
— задает цвет указанного пиксела. Форматы метода: setPixel(, , <Индекс или цвет>) setPixel(, <Индекс или цвет>)
В параметре
<Индекс или цвет>
для 8-битных изображений задается индекс цвета в па- литре, а для 32-битных — целочисленное значение цвета, получить которое позволяют методы rgb()
и rgba()
класса
QColor
;
 pixel()
— возвращает целочисленное значение цвета указанного пиксела. Это значение можно передать конструктору класса
QColor
, а затем получить значения различных со- ставляющих цвета. Форматы метода: pixel(, ) pixel()
 convertToFormat()
— преобразует формат изображения (см. значения параметра
<Формат>
в конструкторе класса
QImage
) и возвращает новый экземпляр класса
QImage
. Исходное изображение не изменяется. Форматы метода: convertToFormat(<Формат>[, flags=AutoColor]) convertToFormat(<Формат>, <Таблица цветов>[, flags=AutoColor])
 copy()
— возвращает экземпляр класса
QImage с фрагментом изображения. Если пара- метр rect не указан, изображение копируется полностью. Форматы метода: copy([rect=QRect()]) copy(, , <Ширина>, <Высота>)
 scaled()
— изменяет размер изображения и возвращает результат в виде экземпляра класса
QImage
. Исходное изображение не изменяется. Форматы метода: scaled(<Ширина>, <Высота>[, aspectRatioMode=IgnoreAspectRatio][, transformMode=FastTransformation]) scaled([, aspectRatioMode=IgnoreAspectRatio][, transformMode=FastTransformation])
В необязательном параметре aspectRatioMode могут быть указаны следующие атрибуты из класса
QtCore.Qt
:

IgnoreAspectRatio

0
— изменяет размеры без сохранения пропорций сторон;

KeepAspectRatio

1
— изменяет размеры с сохранением пропорций сторон. При этом часть области нового изображения может оказаться незаполненной;

KeepAspectRatioByExpanding

2
— изменяет размеры с сохранением пропорций сторон. При этом часть нового изображения может выйти за пределы его области.
В необязательном параметре transformMode могут быть указаны следующие атрибуты класса
QtCore.Qt
:

FastTransformation

0
— сглаживание выключено;

SmoothTransformation

1
— сглаживание включено;
 scaledToWidth(<Ширина>[, mode=FastTransformation])
— изменяет ширину изображе- ния и возвращает результат в виде экземпляра класса
QImage
. Высота изображения изме-

Глава 24. Работа с графикой
581 няется пропорционально. Исходное изображение не изменяется. Параметр mode аналоги- чен параметру transformMode в методе scaled()
;
 scaledToHeight(<Высота>[, mode=FastTransformation])
— изменяет высоту изображе- ния и возвращает результат в виде экземпляра класса
QImage
. Ширина изображения из- меняется пропорционально. Исходное изображение не изменяется. Параметр mode анало- гичен параметру transformMode в методе scaled()
;
 transformed([, mode=FastTransformation])
— производит трансформацию изображения (например, поворот) и возвращает результат в виде экземпляра класса
QImage
. Исходное изображение не изменяется. Трансформация задается с помощью эк- земпляра класса
QTransform
. Параметр mode аналогичен параметру transformMode в ме- тоде scaled()
;
 invertPixels([mode=InvertRgb])
— инвертирует значения всех пикселов в изображении.
В необязательном параметре mode может быть указан атрибут
InvertRgb или
InvertRgba класса
QImage
;
 mirrored([horizontal=False][, vertical=True])
— создает зеркальный образ изобра- жения. Метод возвращает экземпляр класса
QImage
. Исходное изображение не изменя- ется.
24.3.4. Класс QIcon
Класс
QIcon представляет значки в различных размерах, режимах и состояниях. Обратите внимание, что он не наследует класс
QPaintDevice
, — следовательно, мы не можем исполь- зовать его как поверхность для рисования. Форматы конструктора:
<Объект> = QIcon()
<Объект> = QIcon(<Путь к файлу>)
<Объект> = QIcon()
<Объект> = QIcon()
Первый конструктор создает пустой объект значка. Второй конструктор выполняет загрузку значка из файла, причем файл загружается при первой попытке использования, а не сразу.
Третий конструктор создает значок на основе экземпляра класса
QPixmap
, а четвертый — создает копию значка.
Класс
QIcon поддерживает следующие методы (здесь приведены только основные — пол- ный их список можно найти на странице https://doc.qt.io/qt-5/qicon.html):
 isNull()
— возвращает значение
True
, если объект является пустым, и
False
— в про- тивном случае;
 addFile(<Путь к файлу>[, size=QSize()][, mode=Normal][, state=Off])
— добавляет значок для указанного размера, режима и состояния. Можно добавить несколько знач- ков, вызывая метод с разными значениями параметров. Параметр size задает размер значка в виде экземпляра класса
QSize
(т. к. загрузка значка производится при первой попытке использования, заранее размер значка неизвестен, и нам придется задать его явно). В параметре mode можно указать следующие атрибуты класса
QIcon
:
Normal
(обычное состояние компонента),
Disabled
(компонент недоступен),
Active
(компонент активен) или
Selected
(компонент выделен — обычно используется для элементов пред- ставлений). В параметре state указываются атрибуты
Off
(отключенное состояние) или
On
(включенное состояние) класса
QIcon
;

582
Часть II. Библиотека PyQt 5
 addPixmap([, mode=Normal][, state=Off])
— добавляет значок для указанного режима и состояния. Значок создается на основе экземпляра класса
QPixmap
;
 availableSizes([mode=Normal][, state=Off])
— возвращает доступные размеры (спи- сок с экземплярами класса
QSize
) значков для указанного режима и состояния;
 actualSize([, mode=Normal][, state=Off])
— возвращает фактический размер
(экземпляр класса
QSize
) для указанного размера, режима и состояния. Фактический размер может быть меньше размера, указанного в первом параметре, но не больше;
 pixmap()
— возвращает значок (экземпляр класса
QPixmap
), который примерно соответ- ствует указанному размеру, режиму и состоянию. Форматы метода: pixmap(<Ширина>, <Высота>[, mode=Normal][, state=Off]) pixmap(<Ширина и высота>[, mode=Normal][, state=Off]) pixmap([, mode=Normal][, state=Off])
Во втором формате первый параметр задает и ширину, и высоту значка (предполагается, что значок имеет квадратную форму).
Вместо загрузки значка из файла можно воспользоваться одним из встроенных в PyQt 5 стандартных значков. Загрузить стандартный значок позволяет следующий код: ico = window.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxCritical)
Найти список всех встроенных значков можно в документации к классу
QStyle на странице https://doc.qt.io/qt-5/qstyle.html#StandardPixmap-enum.

ГЛ А В А
25
Графическая сцена
Графическая сцена позволяет отображать объекты (линии, прямоугольники и др.) и произ- водить с ними различные манипуляции (перемещать с помощью мыши, преобразовывать систему координат и др.). Для отображения графических объектов применяется концепция
«модель-представление», позволяющая отделить данные от их отображения и избежать дублирования данных. Благодаря этому одну и ту же сцену можно отобразить сразу в не- скольких представлениях без дублирования. В основе концепции лежат следующие классы:

QGraphicsScene
— исполняет роль сцены, на которой расположены графические объекты
(модель). Этот класс также поддерживает ряд методов для управления такими объек- тами;

QGraphicsItem
— является базовым классом для графических объектов (элементов мо- дели). Можно наследовать этот класс и реализовать свой графический объект или вос- пользоваться готовыми классами, например:
QGraphicsRectItem
(прямоугольник),
QGraphicsEllipseItem
(эллипс) и др.;

QGraphicsView
— предназначен для отображения сцены (представление). Одну сцену можно отображать с помощью нескольких представлений.
Все описанные в этой главе классы объявлены в модуле
QtWidgets
, если не указано иное.
25.1. Класс QGraphicsScene: сцена
Класс
QGraphicsScene исполняет роль сцены, на которой расположены графические объек- ты, и поддерживает множество методов для управления этими объектами. Иерархия насле- дования выглядит так:
QObject — QGraphicsScene
Форматы конструктора:
<Объект> = QGraphicsScene([parent=None])
<Объект> = QGraphicsScene(, , <Ширина>, <Высота>[, parent=None])
<Объект> = QGraphicsScene([, parent=None])
Первый конструктор создает сцену, не имеющую определенного размера. Второй и третий конструкторы позволяют указать размеры сцены в виде вещественных чисел или экземпля- ра класса
QRectF
. В качестве параметра parent можно указать ссылку на родительский ком- понент.

584
Часть II. Библиотека PyQt 5 25.1.1. Настройка сцены
Для настройки различных параметров сцены предназначены следующие методы класса
QGraphicsScene
:
 setSceneRect()
— задает координаты и размеры сцены. Форматы метода: setSceneRect(, , <Ширина>, <Высота>) setSceneRect()
 sceneRect()
— возвращает экземпляр класса
QRectF
с координатами и размерами сцены;
 width()
и height()
— возвращают ширину и высоту сцены соответственно в виде веще- ственного числа;
 itemsBoundingRect()
— возвращает экземпляр класса
QRectF
с координатами и размера- ми прямоугольника, в который вписываются все объекты, расположенные на сцене;
 setBackgroundBrush()
— задает кисть для заднего плана (фона), расположенно- го под графическими объектами. Чтобы изменить задний план, также можно переопре- делить у сцены метод drawBackground()
и выполнять перерисовку заднего плана при каждом вызове внутри него;
 setForegroundBrush()
— задает кисть для переднего плана, расположенного над графическими объектами. Чтобы изменить передний план, также можно переопределить у сцены метод drawForeground()
и внутри него выполнять перерисовку переднего плана при каждом вызове;
 setFont()
— задает шрифт сцены по умолчанию;
 setItemIndexMethod(<Режим>)
— задает режим индексации объектов сцены. В качестве параметра указываются следующие атрибуты класса
QGraphicsScene
:

BspTreeIndex

0
— для поиска объектов используется индекс в виде бинарного дерева. Этот режим следует применять для сцен, большинство объектов которых являются статическими;

NoIndex

-1
— индекс не используется. Этот режим следует применять для сцен, содержимое которых часто меняется;
 setBspTreeDepth(<Число>)
— задает глубину дерева при использовании режима
BspTreeIndex
. По умолчанию установлено значение
0
, которое говорит, что глубина вы- бирается автоматически;
 bspTreeDepth()
— возвращает текущее значение глубины дерева при использовании режима
BspTreeIndex
25.1.2. Добавление и удаление графических объектов
Для добавления графических объектов на сцену и удаления их оттуда предназначены сле- дующие методы класса
QGraphicsScene
:
 addItem()
— добавляет графический объект на сцену. В качестве значе- ния указывается экземпляр класса, наследующего класс
QGraphicsItem
, — например,
QGraphicsEllipseItem
(эллипс);
 addLine()
— создает линию, добавляет ее на сцену и возвращает ссылку на представ- ляющий ее экземпляр класса
QGraphicsLineItem
. Форматы метода:

Глава 25. Графическая сцена
585 addLine(, , , [, pen=QPen()]) addLine([, pen=QPen()])
 addRect()
— создает прямоугольник, добавляет его на сцену и возвращает ссылку на представляющий его экземпляр класса
QGraphicsRectItem
. Форматы метода: addRect(, , <Ширина>, <Высота>[, pen=QPen()][, brush=QBrush()]) addRect([, pen=QPen()][, brush=QBrush()])
 addPolygon([, pen=QPen()][, brush=QBrush()])
— создает многоугольник, добавляет его на сцену и возвращает ссылку на представляющий его экземпляр класса
QGraphicsPolygonItem
;
 addEllipse()
— создает эллипс, добавляет его на сцену и возвращает ссылку на пред- ставляющий его экземпляр класса
QGraphicsEllipseItem
. Форматы метода: addEllipse(, , <Ширина>, <Высота>[, pen=QPen()][, brush=QBrush()]) addEllipse([, pen=QPen()][, brush=QBrush()])
 addPixmap()
— создает изображение, добавляет его на сцену и возвращает ссылку на представляющий его экземпляр класса
QGraphicsPixmapItem
;
 addSimpleText(<Текст>[, font=QFont()])
— создает фрагмент простого текста, добавля- ет его на сцену в позицию с координатами
(0, 0)
и возвращает ссылку на представляю- щий его экземпляр класса
QGraphicsSimpleTextItem
;
 addText(<Текст>[, font=QFont()])
— создает фрагмент форматированного текста, до- бавляет его на сцену в позицию с координатами
(0, 0)
и возвращает ссылку на пред- ставляющий его экземпляр класса
QGraphicsTextItem
;
 addPath([, pen=QPen()][, brush=QBrush()])
— создает сложную фигуру
(«путь»), добавляет ее на сцену и возвращает ссылку на представляющий ее экземпляр класса
QGraphicsPathItem
;
 removeItem()
— убирает графический объект и всех его потомков со сцены. Графический объект при этом не удаляется и, например, может быть добавлен на другую сцену. В качестве значения указывается экземпляр класса, который наследует класс
QGraphicsItem
, например,
QGraphicsEllipseItem
(эллипс);
 clear()
— удаляет все элементы со сцены. Метод является слотом;
 createItemGroup(<Список с объектами>)
— группирует объекты, добавляет группу на сце- ну и возвращает представляющий созданную группу экземпляр класса
QGraphicsItemGroup
;
 destroyItemGroup()
— удаляет группу со сцены, при этом сохра- няя все содержащиеся в группе элементы.
25.1.3. Добавление компонентов на сцену
Помимо графических объектов, на сцену можно добавить компоненты, которые будут функционировать как обычно. Добавить компонент на сцену позволяет метод addWidget()
класса
QGraphicsScene
. Формат метода: addWidget([, flags=0])
В первом параметре указывается экземпляр класса, который наследует класс
QWidget
. Во втором параметре задается тип окна (см. разд. 18.2). Метод возвращает ссылку на экземпляр класса
QGraphicsProxyWidget
, представляющий добавленный компонент.

586
Часть II. Библиотека PyQt 5 25.1.4. Поиск объектов
Для поиска графических объектов, находящихся на сцене, предназначены следующие мето- ды класса
QGraphicsScene
:
 itemAt()
— возвращает ссылку на верхний видимый объект, который расположен по указанным координатам, или значение
None
, если никакого объекта там нет. Форматы метода: itemAt(, , ) itemAt(, )
Третий параметр задает примененные к сцене преобразования системы координат
(см. разд. 24.2.4). Его необходимо указывать, если на сцене присутствуют объекты, игнорирующие преобразования. В противном случае следует указать пустой экземпляр класса
QTransform
;
 collidingItems([, mode=IntersectsItemShape])
— возвращает список со ссылками на объекты, которые находятся в указанном в первом параметре объекте или пересекаются с ним. Если таких объектов нет, метод возвращает пустой список. Не- обязательный параметр mode указывает режим поиска графических объектов и должен задаваться следующими атрибутами класса
QtCore.Qt
:

ContainsItemShape

0
— ищутся объекты, чьи границы полностью находятся внут- ри заданного объекта;

IntersectsItemShape

1
— ищутся объекты, чьи границы полностью находятся внутри заданного объекта или пересекаются с его границей;

ContainsItemBoundingRect

2
— ищутся объекты, чьи охватывающие прямоуголь- ники (т. е. прямоугольники минимальных размеров, в которые искомые объекты по- мещаются полностью) полностью находятся внутри охватывающего прямоугольника заданного объекта;

IntersectsItemBoundingRect

3
— ищутся объекты, чьи охватывающие прямо- угольники (т. е. прямоугольники минимальных размеров, в которые искомые объек- ты помещаются полностью) полностью находятся внутри охватывающего прямо- угольника заданного объекта или пересекаются с его границами;
 items()
— возвращает список со ссылками на все объекты или на объекты, расположен- ные по указанным координатам, или на объекты, попадающие в указанную область.
Если объектов нет, то возвращается пустой список. Форматы метода: items([order=DescendingOrder]) items([, mode=IntersectsItemShape][, order=DescendingOrder][, deviceTransform=QTransform()]) items(, , <Ширина>, <Высота>[, mode=IntersectsItemShape][, order=DescendingOrder][, deviceTransform=QTransform()]) items([, mode=IntersectsItemShape][, order=DescendingOrder][, deviceTransform=QTransform()]) items([, mode=IntersectsItemShape][, order=DescendingOrder][, deviceTransform=QTransform()]) items([, mode=IntersectsItemShape][, order=DescendingOrder][, deviceTransform=QTransform()])

Глава 25. Графическая сцена
587
В необязательном параметре order
, задающем порядок сортировки объектов, указыва- ются атрибуты
AscendingOrder
(в алфавитном порядке) или
DescendingOrder
(в обратном порядке) класса
QtCore.Qt
В необязательном параметре mode указываются следующие атрибуты класса
QtCore.Qt
:

ContainsItemShape

0
— объект попадет в список, если все точки объекта находятся внутри заданной области;

IntersectsItemShape

1
— объект попадет в список, если любая точка объекта по- падает в заданную область;

ContainsItemBoundingRect

2
— объект попадет в список, если охватывающий пря- моугольник полностью находится внутри заданной области;

IntersectsItemBoundingRect

3
— объект попадет в список, если любая точка охва- тывающего прямоугольника попадает в заданную область.
Необязательный параметр deviceTransform задает примененные к сцене преобразования системы координат (см. разд. 24.2.4). Его необходимо указывать, если на сцене присут- ствуют объекты, игнорирующие преобразования.
25.1.5. Управление фокусом ввода
Получить фокус ввода с клавиатуры может как сцена в целом, так и отдельный объект на ней. Если фокус установлен на отдельный объект, все события клавиатуры перенаправля- ются этому объекту. Чтобы объект мог принимать фокус ввода, необходимо установить флаг
ItemIsFocusable
, например, с помощью метода setFlag()
класса
QGraphicsItem
. Для управления фокусом ввода предназначены следующие методы этого класса:
 setFocus([focusReason=OtherFocusReason])
— устанавливает фокус ввода на сцену. В па- раметре focusReason можно указать причину изменения фокуса ввода (см. разд. 19.8.1);
 setFocusItem([, focusReason=OtherFocusReason])
— устанавливает фокус ввода на указанный графический объект на сцене. Если сцена была вне фокуса ввода, она автоматически получит фокус. Если в первом параметре указано значение
None
, или объект не может принимать фокус, метод просто убирает фокус с объекта, обладающего им в текущий момент. В параметре focusReason можно указать причину изменения фокуса ввода (см. разд. 19.8.1);
 clearFocus()
— убирает фокус ввода со сцены. Объект, который обладает фокусом вво- да в текущий момент, потеряет его, но получит его снова, когда фокус будет опять уста- новлен на сцену;
 hasFocus()
— возвращает значение
True
, если сцена имеет фокус ввода, и
False
— в противном случае;
 focusItem()
— возвращает ссылку на объект, который обладает фокусом ввода, или зна- чение
None
;
 setStickyFocus(<Флаг>)
— если в качестве параметра указано значение
True
, то при щелчке мышью на фоне сцены или на объекте, который не может принимать фокус, объект, владеющий фокусом, не потеряет его. По умолчанию фокус убирается;
 stickyFocus()
— возвращает значение
True
, если фокус ввода не будет убран с объекта при щелчке мышью на фоне или на объекте, который не может принимать фокус.

588
Часть II. Библиотека PyQt 5 25.1.6. Управление выделением объектов
Чтобы объект можно было выделить (с помощью мыши или программно), необходимо установить флаг
ItemIsSelectable
, например, с помощью метода setFlag()
класса
QGraphicsItem
. Для управления выделением объектов предназначены следующие методы этого класса:
 setSelectionArea()
— выделяет объекты внутри указанной области. Чтобы выделить только один объект, следует воспользоваться методом setSelected()
класса
QGraphicsItem
. Форматы метода setSelectionArea()
: setSelectionArea(, ) setSelectionArea([, mode=IntersectsItemShape][, deviceTransform=QTransform()]) setSelectionArea(, <Операция>[, mode=IntersectsItemShape][, deviceTransform=QTransform()])
В необязательном параметре mode могут быть указаны следующие атрибуты класса
QtCore.Qt
:

ContainsItemShape

0
объект будет выделен, если все точки объекта находятся внутри области выделения;

IntersectsItemShape

1
— объект будет выделен, если любая точка объекта попа- дет в область выделения;

ContainsItemBoundingRect

2
— объект будет выделен, если охватывающий прямо- угольник полностью находится внутри области выделения;

IntersectsItemBoundingRect

3
— объект будет выделен, если любая точка охваты- вающего прямоугольника попадет в область выделения.
Второй параметр первого формата и параметр deviceTransform второго формата задают примененные к сцене преобразования системы координат (см. разд. 24.2.4).
Третий формат позволяет дополнительно указать, какое преобразование (параметр
<Операция>
) следует выполнить с ранее выделенными объектами сцены. В качестве па- раметра
<Операция>
задается один из следующих атрибутов класса
QtCore.Qt
:

ReplaceSelection

0
— ранее выделенные объекты перестанут быть выделенными;

AddToSelection

1
— ранее выделенные объекты останутся выделенными.
Этот формат поддерживается, начиная с PyQt 5.5;
 selectionArea()
— возвращает область выделения в виде экземпляра класса
QPainterPath
;
 selectedItems()
— возвращает список со ссылками на выделенные объекты или пустой список, если выделенных объектов нет;
 clearSelection()
— снимает выделение. Метод является слотом.
25.1.7. Прочие методы и сигналы
Помимо рассмотренных ранее, класс
QGraphicsScene поддерживает следующие методы
(здесь приведены только основные — полный их список можно найти на странице https:// doc.qt.io/qt-5/qgraphicsscene.html
):
 isActive()
— возвращает значение
True
, если сцена отображается на экране с помощью какого-либо представления, и
False
— в противном случае;

Глава 25. Графическая сцена
589
 views()
— возвращает список с представлениями (экземпляры класса
QGraphicsView
), в которых выводится сцена. Если сцена вообще не выводится на экран, возвращается пустой список;
 mouseGrabberItem()
— возвращает ссылку на объект, который владеет мышью, или
None
, если такого объекта нет;
 render()
— позволяет вывести содержимое сцены на устройство рисования или прин- тер. Формат метода: render([, target=QRectF()][, source=QRectF()][, mode=KeepAspectRatio])
Параметр target задает координаты и размеры устройства рисования, а параметр source
— координаты и размеры прямоугольной области на сцене. Если параметры не указаны, используются размеры устройства рисования и сцены. В параметре mode
, задающем режим изменения размеров графики при выводе, могут быть указаны сле- дующие атрибуты класса
QtCore.Qt
:

IgnoreAspectRatio

0
— изменяет размеры без сохранения пропорций сторон;

KeepAspectRatio

1
— изменяет размеры с сохранением пропорций сторон. При этом часть области на устройстве рисования может оказаться незаполненной;

KeepAspectRatioByExpanding

2
— изменяет размеры с сохранением пропорций сторон. При этом часть выводимой графики может выйти за пределы области на устройстве рисования;
 invalidate()
— вызывает перерисовку указанных слоев внутри прямоугольной области на сцене. Форматы метода: invalidate(, , <Ширина>, <Высота>[, layers=AllLayers]) invalidate([rect=QRectF()][, layers=AllLayers])
В параметре layers
, задающем слои, которые требуется перерисовать, могут быть указа- ны следующие атрибуты класса
QGraphicsScene
:

ItemLayer

1
— слой объекта;

BackgroundLayer

2
— слой заднего плана;

ForegroundLayer

4
— слой переднего плана;

AllLayers

65535
— все слои. Вначале отрисовывается слой заднего плана, затем — слой объекта и в конце — слой переднего плана.
Второй формат метода является слотом;
 update()
— вызывает перерисовку указанной прямоугольной области сцены. Форматы метода: update(, , <Ширина>, <Высота>) update([rect=QRectF()])
Второй формат метода является слотом.
Класс
QGraphicsScene поддерживает следующие сигналы:
 changed(<Список областей>)
— генерируется при изменении сцены. Внутри обработчика через параметр доступен список с экземплярами класса
QRectF
, представляющими изме- нившиеся области сцены;
 sceneRectChanged()
— генерируется при изменении размеров сцены. Внутри обработчика через параметр доступен экземпляр класса
QRectF
с новыми координатами и размерами сцены;

590
Часть II. Библиотека PyQt 5
 selectionChanged()
— генерируется при изменении выделения объектов;
 focusItemChanged(, , <Причина изменения фокуса>)
— генерируется при изменении фокуса клавиатурного ввода. Через параметры доступны объект, получивший фокус ввода, объект, потерявший фокус ввода, и причина измене- ния фокуса (см. разд. 19.8.1).
25.2. Класс QGraphicsView: представление
Класс
QGraphicsView предназначен для отображения сцены. Одну сцену можно отображать с помощью нескольких представлений. Иерархия наследования:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea — QGraphicsView
Форматы конструктора класса:
<Объект> = QGraphicsView([parent=None])
<Объект> = QGraphicsView([, parent=None])
Второй формат сразу же позволяет установить в представлении сцену, которая будет выво- диться на экран.
25.2.1. Настройка представления
Для настройки различных параметров представления применяются следующие методы класса
QGraphicsView
(здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsview.html):
 setScene()
— устанавливает выводимую на экран сцену;
 scene()
— возвращает ссылку на установленную сцену в виде экземпляра класса
QGraphicsScene
;
 setSceneRect()
— задает координаты и размеры сцены. Форматы метода: setSceneRect(, , <Ширина>, <Высота>) setSceneRect()
 sceneRect()
— возвращает экземпляр класса
QRectF
с координатами и размерами сцены;
 setBackgroundBrush()
— задает кисть для заднего плана (фона) сцены (распо- ложен под графическими объектами);
 setForegroundBrush()
— задает кисть для переднего плана сцены (расположен над графическими объектами);
 setCacheMode(<Режим>)
— задает режим кэширования выводимых объектов. В качестве параметра могут быть указаны следующие атрибуты класса
QGraphicsView
:

CacheNone

0
— без кэширования;

CacheBackground

1
— кэшируется только задний фон;
 resetCachedContent()
— сбрасывает кэш;
 setAlignment(<Выравнивание>)
— задает выравнивание сцены в случае, если содержимое сцены полностью помещается в представлении. По умолчанию сцена центрируется по горизонтали и вертикали. Вот пример установки сцены в левом верхнем углу представ- ления: view.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)

Глава 25. Графическая сцена
591
 setInteractive(<Флаг>)
— если в качестве параметра указано значение
True
, пользова- тель может взаимодействовать с объектами на сцене (интерактивный режим, использу- ется по умолчанию). Значение
False разрешает только просмотр сцены;
 isInteractive()
— возвращает значение
True
, если задан интерактивный режим, и
False
— в противном случае;
 setDragMode(<Режим>)
— задает действие, которое производится при щелчке левой кнопкой мыши на фоне и перемещении мыши. Получить текущее действие позволяет метод dragMode()
. В качестве параметра могут быть указаны следующие атрибуты клас- са
QGraphicsView
:

NoDrag

0
— ничего не происходит;

ScrollHandDrag

1
— перемещение мыши при нажатой левой кнопке будет приво- дить к прокрутке сцены. При этом указатель мыши примет вид сжатой или разжатой руки;

RubberBandDrag

2
— создается область выделения. Объекты, частично или пол- ностью (задается с помощью метода setRubberBandSelectionMode()
) попавшие в эту область, будут выделены (при условии, что установлен флаг
ItemIsSelectable
). Дей- ствие выполняется только в интерактивном режиме;
 setRubberBandSelectionMode(<Режим>)
— задает режим выделения объектов при уста- новленном флаге
RubberBandDrag
. В параметре
<Режим>
могут быть указаны следующие атрибуты класса
QtCore.Qt
:

ContainsItemShape

0
— объект будет выделен, если все точки объекта находятся внутри области выделения;

IntersectsItemShape

1
— объект будет выделен, если любая точка объекта попа- дет в область выделения;

ContainsItemBoundingRect

2
— объект будет выделен, если охватывающий прямо- угольник полностью находится внутри области выделения;

IntersectsItemBoundingRect

3
— объект будет выделен, если любая точка охваты- вающего прямоугольника попадет в область выделения;
 setRenderHint(<Опция вывода>[, <Флаг>])
— управляет опциями, влияющими на каче- ство отображения сцены. Если вторым параметром передано значение
True
, или если второй параметр вообще не указан,
<Опция вывода>
активизируется, если же передано
False
, опция деактивируется. Сама
<Опция вывода>
указывается в виде одного из сле- дующих атрибутов класса
QPainter
:

Antialiasing

1
— выполнять сглаживание краев у графических объектов;

TextAntialiasing

2
— выполнять сглаживание текста. Активизирован по умолча- нию;

SmoothPixmapTransform

4
— использовать более качественное сглаживание при трансформациях растровых изображений;

Qt4CompatiblePainting

32
— использовать тот же способ сглаживания, что приме- нялся в PyQt 4. Присутствует для совместимости.
Вот пример активизирования для представления всех доступных опций вывода: view.setRenderHint(QtGui.QPainter.Antialiasing) view.setRenderHint(QtGui.QPainter.TestAntialiasing) view.setRenderHint(QtGui.QPainter.SmoothPixmapTransform)

592
Часть II. Библиотека PyQt 5
 setRenderHints(<Опции вывода>)
— активизирует сразу все указанные
<Опции вывода>
(те, что не были указаны, деактивируются).
<Опции вывода>
задаются в виде комбинации описанных ранее атрибутов класса
QPainter
, перечисленных через оператор
|
Вот пример активизирования для представления всех доступных опций: view.setRenderHints(QtGui.QPainter.Antialiasing |
QtGui.QPainter.TestAntialiasing |
QtGui.QPainter.SmoothPixmapTransform)
25.2.2. Преобразования между координатами представления и сцены
Для преобразования между координатами представления и сцены предназначены следую- щие методы класса
QGraphicsView
:
 mapFromScene()
— преобразует координаты точки из системы координат сцены в сис- тему координат представления. Форматы метода (справа указан тип возвращаемого зна- чения): mapFromScene(, ) -> QPoint mapFromScene() -> QPoint mapFromScene(, , <Ширина>, <Высота>) -> QPolygon mapFromScene() -> QPolygon mapFromScene() -> QPolygon mapFromScene() -> QPainterPath
 mapToScene()
— преобразует координаты точки из системы координат представления в систему координат сцены. Форматы метода (справа указан тип возвращаемого значе- ния): mapToScene(, ) -> QPointF mapToScene() -> QPointF mapToScene(, , <Ширина>, <Высота>) -> QPolygonF mapToScene() -> QPolygonF mapToScene() -> QPolygonF mapToScene() -> QPainterPath
25.2.3. Поиск объектов
Для поиска объектов на сцене предназначены следующие методы:
 itemAt()
— возвращает ссылку на верхний видимый объект, который расположен по указанным координатам, или значение
None
, если никакого объекта там нет. В качестве значений указываются координаты в системе координат представления, а не сцены.
Форматы метода: itemAt(, ) itemAt()
 items()
— возвращает список со ссылками на все объекты, или на объекты, располо- женные по указанным координатам, или на объекты, попадающие в указанную область.
Если объектов нет, возвращается пустой список. В качестве значений указываются координаты в системе координат представления, а не сцены. Форматы метода:

Глава 25. Графическая сцена
593 items() items(, ) items() items(, , <Ширина>, <Высота>[, mode=IntersectsItemShape]) items([, mode=IntersectsItemShape]) items([, mode=IntersectsItemShape]) items([, mode=IntersectsItemShape])
Допустимые значения параметра mode мы уже рассматривали в разд. 25.1.4.
25.2.4. Преобразование системы координат
Выполнить преобразование системы координат позволяют следующие методы класса
QGraphicsView
:
 translate(, )
— перемещает начало координат в указанную точку. По умол- чанию начало координат находится в левом верхнем углу, ось
X
направлена вправо, а ось
Y
— вниз;
 rotate(<Угол>)
— поворачивает систему координат на указанное количество градусов
(указывается вещественное число). Положительное значение вызывает поворот по часо- вой стрелке, а отрицательное значение — против часовой стрелки;
 scale(<По оси X>, <По оси Y>)
— масштабирует систему координат. В качестве значе- ний указываются вещественные числа. Если значение меньше единицы, то выполняется уменьшение, а если больше единицы — то увеличение;
 shear(<По горизонтали>, <По вертикали>)
— сдвигает систему координат. В качестве значений указываются вещественные числа;
 resetTransform()
— отменяет все преобразования.
Несколько преобразований можно произвести последовательно друг за другом. При этом надо учитывать, что порядок следования преобразований имеет значение.
Если одна и та же последовательность выполняется несколько раз, то ее можно сохранить в экземпляре класса
QTransform
, а затем установить с помощью метода setTransform()
. По- лучить ссылку на установленную матрицу позволяет метод transform()
25.2.5. Прочие методы
Помимо рассмотренных ранее, класс
QGraphicsView поддерживает следующие методы
(Здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsview.html
):
 centerOn()
— прокручивает область таким образом, чтобы указанная точка или объект находились в центре видимой области представления. Форматы метода: centerOn(, ) centerOn() centerOn()
 ensureVisible()
— прокручивает область таким образом, чтобы указанный прямоуголь- ник или объект находились в видимой области представления. Форматы метода: ensureVisible(, , <Ширина>, <Высота>[, xMargin=50][, yMargin=50]) ensureVisible([, xMargin=50][, yMargin=50]) ensureVisible([, xMargin=50][, yMargin=50])

594
Часть II. Библиотека PyQt 5
Необязательные параметры xMargin и yMargin задают минимальные значения просветов между границами графического объекта и краями представления по горизонтали и вер- тикали соответственно;
 fitInView()
— прокручивает и масштабирует область таким образом, чтобы указанный прямоугольник или объект занимали всю видимую область представления. Форматы метода: fitInView(, , <Ширина>, <Высота>[, mode=IgnoreAspectRatio]) fitInView([, mode=IgnoreAspectRatio]) fitInView([, mode=IgnoreAspectRatio])
Необязательный параметр mode задает режим изменения размеров. Его значения рас- сматривались в разд. 25.1.7 (см. описание метода render()
класса
QGraphicsScene
);
 render()
— позволяет вывести содержимое представления на устройство рисования или принтер. Формат метода: render([, target=QRectF()][, source=QRectF()][, mode=KeepAspectRatio])
Назначение параметров этого метода сходно с таковым у метода render()
класса
QGraphicsScene
(см. разд. 25.1.7);
 invalidateScene([rect=QRectF()][, layers=AllLayers])
— вызывает перерисовку ука- занных слоев внутри прямоугольной области на сцене. Назначение его параметров сход- но с таковым у одноименного метода класса
QGraphicsScene
(см. разд. 25.1.7). Метод является слотом;
 updateSceneRect()
— вызывает перерисовку указанной прямоугольной области сцены. Метод является слотом;
 updateScene(<Список с экземплярами класса QRectF>)
— вызывает перерисовку указан- ных прямоугольных областей. Метод является слотом.
25.3. Класс QGraphicsItem: базовый класс для графических объектов
Абстрактный класс
QGraphicsItem является базовым классом для графических объектов.
Формат конструктора класса:
QGraphicsItem([parent=None])
В параметре parent может быть указана ссылка на родительский объект (экземпляр класса, наследующего класс
QGraphicsItem
).
Поскольку класс
QGraphicsItem является абстрактным, создать его экземпляр нельзя. Чтобы создать новый графический объект, следует наследовать этот класс и переопределить, как минимум, методы boundingRect()
и paint()
. Метод boundingRect()
должен возвращать экземпляр класса
QRectF
с координатами и размерами прямоугольной области, ограничи- вающей объект. Внутри метода paint()
необходимо выполнить рисование объекта. Формат метода paint()
: paint(self, , , widget=None)
Для обработки столкновений следует также переопределить метод shape()
. Метод должен возвращать экземпляр класса
QPainterPath

Глава 25. Графическая сцена
595 25.3.1. Настройка объекта
Для настройки различных параметров объекта предназначены следующие методы класса
QGraphicsItem
(здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsitem.html):
 setPos()
— задает позицию объекта относительно родителя или сцены (при отсутствии родителя). Форматы метода: setPos(, ) setPos()
 pos()
— возвращает экземпляр класса
QPointF
с текущими координатами относительно родителя или сцены (при отсутствии родителя);
 scenePos()
— возвращает экземпляр класса
QPointF
с текущими координатами относи- тельно сцены;
 sceneBoundingRect()
— возвращает экземпляр класса
QRectF
, который содержит коор- динаты (относительно сцены) и размеры прямоугольника, ограничивающего объект;
 setX()
и setY()
— задают позицию объекта по отдельным осям;
 x()
и y()
— возвращают позицию объекта по отдельным осям;
 setZValue()
— задает позицию объекта по оси
Z
. Объект с бо´льшим значением этого параметра рисуется выше объекта с меньшим значением. По умолчанию для всех объек- тов значение позиции по оси
Z
равно
0.0
;
 zValue()
— возвращает позицию объекта по оси
Z
;
 moveBy(<По оси X>, <По оси Y>)
— сдвигает объект на указанное смещение относи- тельно текущей позиции;
 prepareGeometryChange()
— этот метод следует вызвать перед изменением размеров объекта, чтобы поддержать индекс сцены в актуальном состоянии;
 scene()
— возвращает ссылку на сцену (экземпляр класса
QGraphicsScene
) или значение
None
, если объект не помещен на сцену;
 setFlag(<Флаг>[, enabled=True])
— устанавливает (если второй параметр имеет значе- ние
True
) или сбрасывает (если второй параметр имеет значение
False
) указанный флаг.
В первом параметре могут быть указаны следующие атрибуты класса
QGraphicsItem
(здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsitem.html#GraphicsItemFlag-enum
):

ItemIsMovable

0x1
— объект можно перемещать с помощью мыши;

ItemIsSelectable

0x2
— объект можно выделять;

ItemIsFocusable

0x4
— объект может получить фокус ввода;

ItemIgnoresTransformations

0x20
— объект игнорирует наследуемые преобразо- вания;

ItemIgnoresParentOpacity

0x40
— объект игнорирует прозрачность родителя;

ItemDoesntPropagateOpacityToChildren

0x80
— прозрачность объекта не распро- страняется на потомков;

ItemStacksBehindParent

0x100
— объект располагается позади родителя;

ItemIsPanel

0x4000
— объект является панелью;

596
Часть II. Библиотека PyQt 5
 setFlags(<Флаги>)
— устанавливает сразу несколько флагов. Атрибуты (см. описание метода setFlag()
) указываются через оператор
|
;
 flags()
— возвращает комбинацию установленных флагов (см. описание метода setFlag()
);
 setOpacity(<Число>)
— задает степень прозрачности объекта. В качестве значения ука- зывается вещественное число от
0.0
(полностью прозрачный) до
1.0
(полностью непро- зрачный);
 opacity()
— возвращает степень прозрачности объекта;
 setToolTip(<Текст>)
— задает текст всплывающей подсказки;
 setCursor(<Курсор>)
— задает внешний вид указателя мыши при наведении указателя на объект (см. разд. 19.9.5);
 unsetCursor()
— отменяет изменение указателя мыши;
 setVisible(<Флаг>)
— если в качестве параметра указано значение
True
, то объект будет видим. Значение
False скрывает объект;
 show()
— делает объект видимым;
 hide()
— скрывает объект;
 isVisible()
— возвращает значение
True
, если объект видим, и
False
— если скрыт;
 setEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, объект будет доступен. Значение
False делает объект недоступным. Недоступный объект не получает никаких событий, и его нельзя выделить;
 isEnabled()
— возвращает значение
True
, если объект доступен, и
False
— если недос- тупен;
 setSelected(<Флаг>)
— если в качестве параметра указано значение
True
, объект будет выделен. Значение
False снимает выделение. Чтобы объект можно было выделить, необходимо установить флаг
ItemIsSelectable
, например, с помощью метода setFlag()
класса
QGraphicsItem
;
 isSelected()
— возвращает значение
True
, если объект выделен, и
False
— в противном случае;
 setFocus([focusReason=OtherFocusReason])
— устанавливает фокус ввода на объект. В па- раметре focusReason можно указать причину изменения фокуса ввода (см. разд. 19.8.1).
Чтобы объект мог принимать фокус ввода, необходимо установить флаг
ItemIsFocusable
, например, с помощью метода setFlag()
класса
QGraphicsItem
;
 clearFocus()
— убирает фокус ввода с объекта;
 hasFocus()
— возвращает значение
True
, если объект находится в фокусе ввода, и
False
— в противном случае;
 grabKeyboard()
— захватывает ввод с клавиатуры;
 ungrabKeyboard()
— освобождает ввод с клавиатуры;
 grabMouse()
— захватывает мышь;
 ungrabMouse()
— освобождает мышь.

Глава 25. Графическая сцена
597 25.3.2. Выполнение преобразований
Задать преобразования для графического объекта можно, воспользовавшись классом
QTransform
. Для работы с преобразованиями, заданными экземплярами этого класса, класс
QGraphicsItem поддерживает следующие методы:
 setTransform([, combine=False])
— устанавливает преобразования, задан- ные в первом параметре. Если вторым параметром передать значение
True
, новые пре- образования будут объединены с уже установленными, — в противном случае они заме- нят установленные ранее преобразования;
 transform()
— возвращает экземпляр класса
QTransform
, представляющий заданные для объекта преобразования;
 sceneTransform()
— возвращает экземпляр класса
QTransform
, который представляет преобразования, заданные для самой графической сцены.
Есть и более простой способ задания преобразований — использование следующих методов класса
QGraphicsItem
:
 setTransformOriginPoint()
— перемещает начало координат в указанную точку. Форма- ты метода: setTransformOriginPoint(, ) setTransformOriginPoint()
 setRotation(<Угол>)
— поворачивает систему координат на указанное количество гра- дусов (указывается вещественное число): положительное значение вызывает поворот по часовой стрелке, а отрицательное — против часовой стрелки;
 rotation()
— возвращает текущий угол поворота;
 setScale(<Значение>)
— масштабирует систему координат. В качестве значений указы- ваются вещественные числа: если значение меньше единицы, выполняется уменьшение, а если больше — увеличение;
 scale()
— возвращает текущий масштаб;
 resetTransform()
— отменяет все преобразования.
25.3.3. Прочие методы
Помимо рассмотренных ранее, класс
QGraphicsItem поддерживает следующие полезные для нас методы (полный их список можно найти на странице https://doc.qt.io/qt-5/ qgraphicsitem.html
):
 setParentItem()
— задает родителя для текущего объекта. Местополо- жение дочернего объекта задается в координатах родительского объекта;
 parentItem()
— возвращает ссылку на родительский объект;
 topLevelItem()
— возвращает ссылку на родительский объект верхнего уровня;
 childItems()
— возвращает список с дочерними объектами;
 contains()
— возвращает
True
, если точка с указанными координатами (эк- земпляр класса
QPointF
) входит в состав графического объекта, и
False
— в противном случае;
 collidingItems([mode=IntersectsItemShape])
— возвращает список со ссылками на объ- екты, которые находятся в текущем объекте или пересекаются с ним. Если таких объектов нет, возвращается пустой список. Возможные значения параметра mode см. в разд. 25.1.4;

598
Часть II. Библиотека PyQt 5
 collidesWithItem([, mode=IntersectsItemShape])
— возвращает значе- ние
True
, если объект находится в объекте, указанном в первом параметре, или пересе- кается с ним. Возможные значения параметра mode см. в разд. 25.1.4;
 collidesWithPath([, mode=IntersectsItemShape])
— возвращает значе- ние
True
, если объект находится внутри пути, указанного в первом параметре, или пере- секается с ним. Возможные значения параметра mode см. в разд. 25.1.4;
 ensureVisible()
— прокручивает область таким образом, чтобы указанный прямоуголь- ник находился в видимой области представления. Форматы метода: ensureVisible(, , <Ширина>, <Высота>[, xMargin=50][, yMargin=50]) ensureVisible([rect=QRectF()][, xMargin=50][, yMargin=50])
Необязательные параметры xMargin и yMargin задают минимальные значения просветов между границами графического объекта и краями представления по горизонтали и вер- тикали соответственно;
 update()
— вызывает перерисовку указанной прямоугольной области. Форматы метода: update(, , <Ширина>, <Высота>) update([rect=QRectF()])
25.4. Графические объекты
Вместо создания собственного объекта путем наследования класса
QGraphicsItem можно воспользоваться следующими стандартными классами:

QGraphicsLineItem
— линия;

QGraphicsRectItem
— прямоугольник;

QGraphicsPolygonItem
— многоугольник;

QGraphicsEllipseItem
— эллипс;

QGraphicsPixmapItem
— изображение;

QGraphicsSimpleTextItem
— простой текст;

QGraphicsTextItem
— форматированный текст;

QGraphicsPathItem
— путь;

QGraphicsSvgItem
— SVG-графика.
25.4.1. Линия
Класс
QGraphicsLineItem описывает линию. Иерархия наследования:
QGraphicsItem — QGraphicsLineItem
Форматы конструктора класса:
<Объект> = QGraphicsLineItem([parent=None])
<Объект> = QGraphicsLineItem(, , , [, parent=None])
<Объект> = QGraphicsLineItem([, parent=None])
В параметре parent можно указать ссылку на родительский объект.

Глава 25. Графическая сцена
599
Класс
QGraphicsLineItem наследует все методы класса
QGraphicsItem и включает поддержку следующих методов (полный их список можно найти на странице https://doc.qt.io/qt-5/ qgraphicslineitem.html
):
 setLine()
— задает параметры линии. Форматы метода: setLine(, , , ) setLine()
 line()
— возвращает параметры линии в виде экземпляра класса
QLineF
;
 setPen()
— устанавливает перо.
25.4.2. Класс QAbstractGraphicsShapeItem
Класс
QAbstractGraphicsShapeItem является базовым классом всех графических фигур, более сложных, чем линия. Иерархия наследования:
QGraphicsItem — QAbstractGraphicsShapeItem
Класс
QAbstractGraphicsShapeItem поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/ qabstractgraphicsshapeitem.html
):
 setPen()
— устанавливает перо;
 setBrush()
— устанавливает кисть.
25.4.3. Прямоугольник
Класс
QGraphicsRectItem описывает прямоугольник. Иерархия наследования:
QGraphicsItem — QAbstractGraphicsShapeItem — QGraphicsRectItem
Форматы конструктора класса:
<Объект> = QGraphicsRectItem([parent=None])
<Объект> = QGraphicsRectItem(, , <Ширина>, <Высота>[, parent=None])
<Объект> = QGraphicsRectItem([, parent=None])
В параметре parent можно указать ссылку на родительский объект.
Класс
QGraphicsRectItem наследует все методы базовых классов и поддерживает следую- щие методы (здесь приведены только основные — полный их список можно найти на стра- нице https://doc.qt.io/qt-5/qgraphicsrectitem.html):
 setRect()
— задает параметры прямоугольника. Форматы метода: setRect(, , <Ширина>, <Высота>) setRect()
 rect()
— возвращает параметры прямоугольника в виде экземпляра класса
QRectF
25.4.4. Многоугольник
Класс
QGraphicsPolygonItem описывает многоугольник. Иерархия наследования:
QGraphicsItem — QAbstractGraphicsShapeItem — QGraphicsPolygonItem

600
Часть II. Библиотека PyQt 5
Форматы конструктора класса:
<Объект> = QGraphicsPolygonItem([parent=None])
<Объект> = QGraphicsPolygonItem([, parent=None])
В параметре parent можно указать ссылку на родительский объект.
Класс
QGraphicsPolygonItem наследует все методы из базовых классов и поддерживает сле- дующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicspolygonitem.html):
 setPolygon()
— задает параметры многоугольника;
 polygon()
— возвращает параметры многоугольника в виде экземпляра класса
QPolygonF
25.4.5. Эллипс
Класс
QGraphicsEllipseItem описывает эллипс. Иерархия наследования:
QGraphicsItem — QAbstractGraphicsShapeItem — QGraphicsEllipseItem
Форматы конструктора класса:
<Объект> = QGraphicsEllipseItem([parent=None])
<Объект> = QGraphicsEllipseItem(, , <Ширина>, <Высота>[, parent=None])
<Объект> = QGraphicsEllipseItem([, parent=None])
В параметре parent можно указать ссылку на родительский объект.
Класс
QGraphicsEllipseItem наследует все методы базовых классов и поддерживает сле- дующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsellipseitem.html):
 setRect()
— задает параметры прямоугольника, в который необходимо вписать эллипс.
Форматы метода: setRect(, , <Ширина>, <Высота>) setRect()
 rect()
— возвращает параметры прямоугольника, в который вписан эллипс, в виде экземпляра класса
QRectF
;
 setStartAngle(<Угол>)
и setSpanAngle(<Угол>)
— задают начальный и конечный углы сектора соответственно. Следует учитывать, что значения углов задаются в значени- ях
1
/
16
°. Полный круг эквивалентен значению 16 × 360 = 5760. Нулевой угол находится в позиции «трех часов». Положительные значения углов отсчитываются против часовой стрелки, а отрицательные — по часовой стрелке;
 startAngle()
и spanAngle()
— возвращают значения начального и конечного углов сек- тора соответственно.
25.4.6. Изображение
Класс
QGraphicsPixmapItem описывает изображение. Иерархия наследования:
QGraphicsItem — QGraphicsPixmapItem

Глава 25. Графическая сцена
601
Форматы конструктора класса:
<Объект> = QGraphicsPixmapItem([parent=None])
<Объект> = QGraphicsPixmapItem([, parent=None])
В параметре parent можно указать ссылку на родительский объект.
Класс
QGraphicsPixmapItem наследует все методы из класса
QGraphicsItem и поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicspixmapitem.html):
 setPixmap()
— задает изображение;
 pixmap()
— возвращает представляющий изображение экземпляр класса
QPixmap
;
 setOffset()
— задает местоположение изображения. Форматы метода: setOffset(, ) setOffset()
 offset()
— возвращает местоположение изображения в виде экземпляра класса
QPointF
;
 setShapeMode(<Режим>)
— задает режим определения формы изображения. В качестве параметра могут быть указаны следующие атрибуты класса
QGraphicsPixmapItem
:

MaskShape

0
— используется результат выполнения метода mask()
класса
QPixmap
(значение по умолчанию);

BoundingRectShape

1
— форма определяется по контуру изображения;

HeuristicMaskShape

2
— используется результат выполнения метода createHeuristicMask()
класса
QPixmap
;
 setTransformationMode(<Режим>)
— задает режим сглаживания. В качестве параметра могут быть указаны следующие атрибуты класса
QtCore.Qt
:

FastTransformation

0
— сглаживание выключено (по умолчанию);

SmoothTransformation

1
— сглаживание включено.
25.4.7. Простой текст
Класс
QGraphicsSimpleTextItem описывает простой текст. Иерархия наследования:
QGraphicsItem — QAbstractGraphicsShapeItem — QGraphicsSimpleTextItem
Форматы конструктора класса:
<Объект> = QGraphicsSimpleTextItem([parent=None])
<Объект> = QGraphicsSimpleTextItem(<Текст>[, parent=None])
В параметре parent можно указать ссылку на родительский объект.
Класс
QGraphicsSimpleTextItem наследует все методы из базовых классов и поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicssimpletextitem.html):
 setText(<Текст>)
— задает текст;
 text()
— возвращает текст;
 setFont()
— задает шрифт;
 font()
— возвращает описывающий заданный шрифт экземпляр класса
QFont

602
Часть II. Библиотека PyQt 5 25.4.8. Форматированный текст
Класс
QGraphicsTextItem описывает форматированный текст. Иерархия наследования:
(QObject, QGraphicsItem) — QGraphicsObject — QGraphicsTextItem
Форматы конструктора класса:
<Объект> = QGraphicsTextItem([parent=None])
<Объект> = QGraphicsTextItem(<Текст>[, parent=None])
В параметре parent можно указать ссылку на родительский объект.
Класс
QGraphicsTextItem наследует все методы из базовых классов и поддерживает сле- дующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicstextitem.html):
 setPlainText(<Простой текст>)
— задает простой текст;
 toPlainText()
— возвращает простой текст;
 setHtml(
1   ...   51   52   53   54   55   56   57   58   ...   83


написать администратору сайта