ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
— перемещает текстовый курсор внутри документа. В первом параметре можно указать следующие атрибуты класса QTextCursor : • NoMove — 0 — не перемещать курсор; • Start — 1 — в начало документа; • Up — 2 — на одну строку вверх; • StartOfLine — 3 — в начало текущей строки; • StartOfBlock — 4 — в начало текущего текстового блока; 478 Часть II. Библиотека PyQt 5 • StartOfWord — 5 — в начало текущего слова; • PreviousBlock — 6 — в начало предыдущего текстового блока; • PreviousCharacter — 7 — на предыдущий символ; • PreviousWord — 8 — в начало предыдущего слова; • Left — 9 — сдвинуть на один символ влево; • WordLeft — 10 — влево на одно слово; • End — 11 — в конец документа; • Down — 12 — на одну строку вниз; • EndOfLine — 13 — в конец текущей строки; • EndOfWord — 14 — в конец текущего слова; • EndOfBlock — 15 — в конец текущего текстового блока; • NextBlock — 16 — в начало следующего текстового блока; • NextCharacter — 17 — на следующий символ; • NextWord — 18 — в начало следующего слова; • Right — 19 — сдвинуть на один символ вправо; • WordRight — 20 — в начало следующего слова. Помимо указанных, существуют также атрибуты NextCell , PreviousCell , NextRow и PreviousRow , позволяющие перемещать текстовый курсор внутри таблицы. В необяза- тельном параметре mode можно указать следующие атрибуты из класса QTextCursor : • MoveAnchor — 0 — если существует выделенный фрагмент, выделение будет снято, и текстовый курсор переместится в новое место (значение по умолчанию); • KeepAnchor — 1 — фрагмент текста от старой позиции курсора до новой будет выде- лен. Класс QTextCursor поддерживает следующие методы (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt-5/qtextcursor.html): isNull() — возвращает значение True , если объект курсора является нулевым (создан с помощью конструктора без параметра), и False — в противном случае; setPosition(<Позиция>[, mode=MoveAnchor]) — перемещает текстовый курсор внутри документа. В первом параметре указывается позиция внутри документа. Необязатель- ный параметр mode аналогичен одноименному параметру в методе moveCursor() класса QTextEdit ; movePosition(<Позиция>[, mode=MoveAnchor][, n=1]) — перемещает текстовый курсор внутри документа. Параметры <Позиция> и mode аналогичны одноименным параметрам в методе moveCursor() класса QTextEdit . Необязательный параметр n позволяет указать количество перемещений — например, переместить курсор на 10 символов вперед мож- но так: cur = textEdit.textCursor() cur.movePosition(QtGui.QTextCursor.NextCharacter, mode=QtGui.QTextCursor.MoveAnchor, n=10) textEdit.setTextCursor(cur) Глава 21. Основные компоненты 479 Метод movePosition() возвращает значение True , если операция успешно выполнена указанное количество раз. Если было выполнено меньшее количество перемещений (например, из-за достижения конца документа), метод возвращает значение False ; position() — возвращает позицию текстового курсора внутри документа; positionInBlock() — возвращает позицию текстового курсора внутри блока; block() — возвращает экземпляр класса QTextBlock , который описывает текстовый блок, содержащий курсор; blockNumber() — возвращает номер текстового блока, содержащего курсор; atStart() — возвращает значение True , если текстовый курсор находится в начале до- кумента, и False — в противном случае; atEnd() — возвращает значение True , если текстовый курсор находится в конце доку- мента, и False — в противном случае; atBlockStart() — возвращает значение True , если текстовый курсор находится в начале блока, и False — в противном случае; atBlockEnd() — возвращает значение True , если текстовый курсор находится в конце блока, и False — в противном случае; select(<Режим>) — выделяет фрагмент в документе в соответствии с указанным режи- мом. В качестве параметра можно указать следующие атрибуты класса QTextCursor : • WordUnderCursor — 0 — выделяет слово, в котором расположен курсор; • LineUnderCursor — 1 — выделяет строку, в которой расположен курсор; • BlockUnderCursor — 2 — выделяет текстовый блок, в котором находится курсор; • Document — 3 — выделяет весь документ; hasSelection() — возвращает значение True , если существует выделенный фрагмент, и False — в противном случае; hasComplexSelection() — возвращает значение True , если выделенный фрагмент содер- жит сложное форматирование, а не просто текст, и False — в противном случае; clearSelection() — снимает выделение; selectionStart() — возвращает начальную позицию выделенного фрагмента; selectionEnd() — возвращает конечную позицию выделенного фрагмента; selectedText() — возвращает текст выделенного фрагмента; В НИМАНИЕ ! Если выделенный фрагмент занимает несколько строк, то вместо символа перевода строки вставляется символ с кодом \u2029. Попытка вывести этот символ в окно консоли приве- дет к исключению, поэтому следует произвести замену символа с помощью метода replace() : print(cur.selectedText().replace("\u2029", "\n")) selection() — возвращает экземпляр класса QTextDocumentFragment , который описывает выделенный фрагмент. Получить текст позволяют методы toPlainText() (возвращает простой текст) и toHtml() (возвращает текст в формате HTML) этого класса; removeSelectedText() — удаляет выделенный фрагмент; 480 Часть II. Библиотека PyQt 5 deleteChar() — если нет выделенного фрагмента, удаляет символ справа от курсора, в противном случае удаляет выделенный фрагмент; deletePreviousChar() — если нет выделенного фрагмента, удаляет символ слева от кур- сора, в противном случае удаляет выделенный фрагмент; beginEditBlock() и endEditBlock() — задают начало и конец блока инструкций. Эти инструкции могут быть отменены или повторены как единое целое с помощью методов undo() и redo() ; joinPreviousEditBlock() — делает последующие инструкции частью предыдущего бло- ка инструкций; setKeepPositionOnInsert(<Флаг>) — если в качестве параметра указано значение True , то после операции вставки курсор сохранит свою предыдущую позицию. По умолчанию позиция курсора при вставке изменяется; insertText(<Текст>[, — вставляет простой текст; insertHtml(<Текст>) — вставляет текст в формате HTML. С помощью методов insertBlock() , insertFragment() , insertFrame() , insertImage() , insertList() и insertTable() можно вставить различные элементы: изображения, списки и др. Изменить формат выделенного фрагмента позволяют методы mergeBlockCharFormat() , mergeBlockFormat() и mergeCharFormat() . За подробной информацией по этим методам обращайтесь к странице документации https://doc.qt.io/qt-5/qtextcursor.html. 21.7. Текстовый браузер Класс QTextBrowser расширяет возможности класса QTextEdit и реализует текстовый брау- зер с возможностью перехода по гиперссылкам. Иерархия наследования выглядит так: (QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea — QTextEdit — QTextBrowser Формат конструктора класса QTextBrowser : <Объект> = QTextBrowser([parent=<Родитель>]) Класс QTextBrowser поддерживает следующие основные методы (полный их список смотри- те на странице https://doc.qt.io/qt-5/qtextbrowser.html): setSource( — загружает ресурс. В качестве параметра указывается экземпляр класса QUrl из модуля QtCore : # Загружаем и выводим содержимое текстового файла url = QtCore.QUrl("text.txt") browser.setSource(url) Метод является слотом; source() — возвращает экземпляр класса QUrl с адресом текущего ресурса; reload() — перезагружает текущий ресурс. Метод является слотом; home() — загружает первый ресурс из списка истории. Метод является слотом; backward() — загружает предыдущий ресурс из списка истории. Метод является слотом; forward() — загружает следующий ресурс из списка истории. Метод является слотом; Глава 21. Основные компоненты 481 backwardHistoryCount() — возвращает количество предыдущих ресурсов из списка ис- тории; forwardHistoryCount() — возвращает количество следующих ресурсов из списка исто- рии; isBackwardAvailable() — возвращает значение True , если существует предыдущий ресурс в списке истории, и False — в противном случае; isForwardAvailable() — возвращает значение True , если существует следующий ресурс в списке истории, и False — в противном случае; clearHistory() — очищает список истории; historyTitle(<Количество позиций>) — если в качестве параметра указано отрицатель- ное число, возвращает заголовок предыдущего ресурса, отстоящего от текущего на за- данное число позиций, если 0 — заголовок текущего ресурса, а если положительное число — заголовок следующего ресурса, также отстоящего от текущего на заданное число позиций; historyUrl(<Количество позиций>) — то же самое, что historyTitle() , но возвращает адрес ресурса в виде экземпляра класса QUrl ; setOpenLinks(<Флаг>) — если в качестве параметра указано значение True , то автомати- ческий переход по гиперссылкам будет разрешен (значение по умолчанию). Значение False запрещает переход. Класс QTextBrowser поддерживает сигналы: anchorClicked( — генерируется при переходе по гиперссылке. Внутри обработ- чика через параметр доступен адрес (URL) гиперссылки; backwardAvailable(<Признак>) — генерируется при изменении статуса списка предыду- щих ресурсов. Внутри обработчика через параметр доступно значение True , если в спи- ске истории имеются предыдущие ресурсы, и False — в противном случае; forwardAvailable(<Признак>) — генерируется при изменении статуса списка следующих ресурсов. В обработчике через параметр доступно значение True , если в списке истории имеются следующие ресурсы, и False — в противном случае; highlighted( — генерируется при наведении указателя мыши на гиперссылку и выведении его. Внутри обработчика через параметр доступен адрес (URL) ссылки или пустой объект; highlighted(<Адрес>) — генерируется при наведении указателя мыши на гиперссылку и выведении его. Внутри обработчика через параметр доступен адрес (URL) ссылки в виде строки или пустая строка; historyChanged — генерируется при изменении списка истории; sourceChanged(<Адрес>) — генерируется при загрузке нового ресурса. Внутри обработ- чика через параметр доступен адрес (URL) загруженного ресурса. 21.8. Поля для ввода целых и вещественных чисел Для ввода целых чисел предназначен класс QSpinBox , для ввода вещественных чисел — класс QDoubleSpinBox . Эти поля могут содержать две кнопки, которые позволяют щелчками 482 Часть II. Библиотека PyQt 5 мыши увеличивать и уменьшать значение внутри поля. Пример такого поля ввода можно увидеть на рис. 21.1. Иерархия наследования: (QObject, QPaintDevice) — QWidget — QAbstractSpinBox — QSpinBox (QObject, QPaintDevice) — QWidget — QAbstractSpinBox — QDoubleSpinBox Рис. 21.1. Компонент QSpinBox Форматы конструкторов классов QSpinBox и QDoubleSpinBox : <Объект> = QSpinBox([parent=<Родитель>]) <Объект> = QDoubleSpinBox([parent=<Родитель>]) Классы QSpinBox и QDoubleSpinBox наследуют следующие методы из класса QAbstractSpinBox (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt-5/qabstractspinbox.html): setButtonSymbols(<Режим>) — задает режим отображения кнопок, предназначенных для изменения значения поля с помощью мыши. Можно указать следующие атрибуты клас- са QAbstractSpinBox : • UpDownArrows — 0 — отображаются кнопки со стрелками; • PlusMinus — 1 — отображаются кнопки с символами + и - . Обратите внимание, что при использовании некоторых стилей это значение может быть проигнорировано; • NoButtons — 2 — кнопки не отображаются; setAlignment(<Режим>) — задает режим выравнивания значения внутри поля; setWrapping(<Флаг>) — если в качестве параметра указано значение True , то значение внутри поля будет при нажатии кнопок изменяться по кругу: максимальное значение сменится минимальным и наоборот; setSpecialValueText(<Строка>) — позволяет задать строку, которая будет отображаться внутри поля вместо минимального значения; setReadOnly(<Флаг>) — если в качестве параметра указано значение True , поле будет доступно только для чтения; setFrame(<Флаг>) — если в качестве параметра указано значение False , поле будет ото- бражаться без рамки; stepDown() — уменьшает значение на одно приращение. Метод является слотом; stepUp() — увеличивает значение на одно приращение. Метод является слотом; stepBy(<Количество>) — увеличивает (при положительном значении) или уменьшает (при отрицательном значении) значение поля на указанное количество приращений; text() — возвращает текст, содержащийся внутри поля; clear() — очищает поле. Метод является слотом; selectAll() — выделяет все содержимое поля. Метод является слотом. Класс QAbstractSpinBox поддерживает сигнал editingFinished , который генерируется при потере полем фокуса ввода или при нажатии клавиши Глава 21. Основные компоненты 483 Классы QSpinBox и QDoubleSpinBox поддерживают следующие методы (здесь приведены только основные — полные их списки доступны на страницах https://doc.qt.io/qt-5/ qspinbox.html и https://doc.qt.io/qt-5/qdoublespinbox.html соответственно): setValue(<Число>) — задает значение поля. Метод является слотом, принимающим, в зависимости от компонента, целое или вещественное значение; value() — возвращает целое или вещественное число, содержащееся в поле; cleanText() — возвращает целое или вещественное число в виде строки; setRange(<Минимум>, <Максимум>) , setMinimum(<Минимум>) и setMaximum(<Максимум>) — задают минимальное и максимальное допустимые значения; setPrefix(<Текст>) — задает текст, который будет отображаться внутри поля перед зна- чением; setSuffix(<Текст>) — задает текст, который будет отображаться внутри поля после зна- чения; setSingleStep(<Число>) — задает число, которое будет прибавляться или вычитаться из текущего значения поля на каждом шаге. Класс QDoubleSpinBox также поддерживает метод setDecimals(<Количество>) , который задает количество цифр после десятичной точки. Классы QSpinBox и QDoubleSpinBox поддерживают сигналы valueChanged(<Целое число>) (только в классе QSpinBox ), valueChanged(<Вещественное число>) (только в классе QDoubleSpinBox ) и valueChanged(<Строка>) , которые генерируются при изменении значения внутри поля. Внутри обработчика через параметр доступно новое значение в виде числа или строки в зависимости от типа параметра. 21.9. Поля для ввода даты и времени Для ввода даты и времени предназначены классы QDateTimeEdit (ввод даты и времени), QDateEdit (ввод даты) и QTimeEdit (ввод времени). Поля могут содержать кнопки, которые позволяют щелчками мыши увеличивать и уменьшать значение внутри поля. Пример такого поля показан на рис. 21.2. Рис. 21.2. Компонент QDateEdit с кнопками-стрелками Иерархия наследования: (QObject, QPaintDevice) — QWidget — QAbstractSpinBox — QDateTimeEdit (QObject, QPaintDevice) — QWidget — QAbstractSpinBox — QDateTimeEdit — QDateEdit (QObject, QPaintDevice) — QWidget — QAbstractSpinBox — QDateTimeEdit — QTimeEdit Форматы конструкторов классов: <Объект> = QDateTimeEdit([parent=<Родитель>]) <Объект> = QDateTimeEdit( <Объект> = QDateTimeEdit( 484 Часть II. Библиотека PyQt 5 <Объект> = QDateTimeEdit( <Объект> = QDateEdit([parent=<Родитель>]) <Объект> = QDateEdit( <Объект> = QTimeEdit([parent=<Родитель>]) <Объект> = QTimeEdit( В параметре можно указать экземпляр класса QDateTime или экземпляр класса datetime из языка Python. Преобразовать экземпляр класса QDateTime в экземпляр класса datetime позволяет метод toPyDateTime() класса QDateTime : >>> from PyQt5 import QtCore >>> d = QtCore.QDateTime() >>> d PyQt5.QtCore.QDateTime() >>> d.toPyDateTime() datetime.datetime(0, 0, 0, 255, 255, 255, 16776216) В качестве параметра можно указать экземпляр класса QDate или экземпляр класса date из языка Python. Преобразовать экземпляр класса QDate в экземпляр класса date позво- ляет метод toPyDate() класса QDate В параметре можно указать экземпляр класса QTime или экземпляр класса time из языка Python. Преобразовать экземпляр класса QTime в экземпляр класса time позволяет метод toPyTime() класса QTime Классы QDateTime , QDate и QTime определены в модуле QtCore Класс QDateTimeEdit наследует все методы из класса QAbstractSpinBox (см. разд. 21.8) и дополнительно реализует следующие методы (здесь приведены только самые полезные — полный их список смотрите на странице https://doc.qt.io/qt-5/qdatetimeedit.html): setDateTime( — устанавливает дату и время. В качестве параметра указы- вается экземпляр класса QDateTime или экземпляр класса datetime из языка Python. Ме- тод является слотом; setDate( — устанавливает дату. В качестве параметра указывается экземпляр класса QDate или экземпляр класса date языка Python. Метод является слотом; setTime( — устанавливает время. В качестве параметра указывается экземпляр класса QTime или экземпляр класса time из языка Python. Метод является слотом; dateTime() — возвращает экземпляр класса QDateTime с датой и временем; date() — возвращает экземпляр класса QDate с датой; time() — возвращает экземпляр класса QTime со временем; setDateTimeRange(<Минимум>, <Максимум>) , setMinimumDateTime(<Минимум>) и setMaximumDateTime(<Максимум>) — задают минимальное и максимальное допустимые значения для даты и времени. В параметрах указывается экземпляр класса QDateTime или экземпляр класса datetime из языка Python; setDateRange(<Минимум>, <Максимум>) , setMinimumDate(<Минимум>) и setMaximumDate (<Максимум>) — задают минимальное и максимальное допустимые значения для даты. В параметрах указывается экземпляр класса QDate или экземпляр класса date из языка Python; setTimeRange(<Минимум>, <Максимум>) , setMinimumTime(<Минимум>) и setMaximumTime( <Максимум>) — задают минимальное и максимальное допустимые значения для време- Глава 21. Основные компоненты 485 ни. В параметрах указывается экземпляр класса QTime или экземпляр класса time из язы- ка Python; setDisplayFormat(<Формат>) — задает формат отображения даты и времени. В качестве параметра указывается строка, содержащая специальные символы. Пример задания строки формата: dateTimeEdit.setDisplayFormat("dd.MM.yyyy HH:mm:ss") setTimeSpec(<Зона>) — задает зону времени. В качестве параметра можно указать атри- буты LocalTime , UTC или OffsetFromUTC класса QtCore.Qt ; setCalendarPopup(<Флаг>) — если в качестве параметра указано значение True , то дату можно будет выбрать с помощью календаря, который появится на экране при щелчке на кнопке с направленной вниз стрелкой, выведенной вместо стандартных кнопок-стрелок (рис. 21.3); Рис. 21.3. Компонент QDateEdit с открытым календарем setSelectedSection(<Секция>) — выделяет указанную секцию. В качестве параметра можно задать атрибуты NoSection , DaySection , MonthSection , YearSection , HourSection , MinuteSection , SecondSection , MSecSection или AmPmSection класса QDateTimeEdit ; setCurrentSection(<Секция>) — делает указанную секцию текущей; setCurrentSectionIndex(<Индекс>) — делает секцию с указанным индексом текущей; currentSection() — возвращает тип текущей секции; currentSectionIndex() — возвращает индекс текущей секции; sectionCount() — возвращает количество секций внутри поля; sectionAt(<Индекс>) — возвращает тип секции по указанному индексу; sectionText(<Секция>) — возвращает текст указанной секции. При изменении значений даты или времени генерируются сигналы timeChanged( , dateChanged( и dateTimeChanged( . Внутри обработчиков через пара- метр доступно новое значение. Классы QDateEdit (поле для ввода даты) и QTimeEdit (поле для ввода времени) созданы для удобства и отличаются от класса QDateTimeEdit только форматом отображаемых данных. Эти классы наследуют методы базовых классов и не добавляют никаких своих методов. 486 Часть II. Библиотека PyQt 5 21.10. Календарь Класс QCalendarWidget реализует календарь с возможностью выбора даты и перемещения по месяцам с помощью мыши и клавиатуры (рис. 21.4). Иерархия наследования: (QObject, QPaintDevice) — QWidget — QCalendarWidget Рис. 21.4. Компонент QCalendarWidget Формат конструктора класса QCalendarWidget : <Объект> = QCalendarWidget([parent=<Родитель>]) Класс QCalendarWidget поддерживает следующие методы (здесь представлены только ос- новные — полный их список смотрите на странице https://doc.qt.io/qt-5/qcalendarwidget.html): setSelectedDate( — устанавливает дату, заданную в качестве параметра экзем- пляром класса QDate или экземпляром класса date языка Python. Метод является слотом; selectedDate() — возвращает экземпляр класса QDate с выбранной датой; setDateRange(<Минимум>, <Максимум>) , setMinimumDate(<Минимум>) и setMaximumDate( <Максимум>) — задают минимальное и максимальное допустимые значения для даты. В параметрах указывается экземпляр класса QDate или экземпляр класса date из языка Python. Метод setDateRange() является слотом; setCurrentPage(<Год>, <Месяц>) — делает текущей страницу календаря с указанными годом и месяцем, которые задаются целыми числами. Выбранная дата при этом не изме- няется. Метод является слотом; monthShown() — возвращает месяц (число от 1 до 12 ), отображаемый на текущей странице; yearShown() — возвращает год, отображаемый на текущей странице; showSelectedDate() — отображает страницу с выбранной датой. Выбранная дата при этом не изменяется. Метод является слотом; showToday() — отображает страницу с сегодняшней датой. Выбранная дата при этом не изменяется. Метод является слотом; Глава 21. Основные компоненты 487 showPreviousMonth() — отображает страницу с предыдущим месяцем. Выбранная дата при этом не изменяется. Метод является слотом; showNextMonth() — отображает страницу со следующим месяцем. Выбранная дата при этом не изменяется. Метод является слотом; showPreviousYear() — отображает страницу с текущим месяцем в предыдущем году. Выбранная дата не изменяется. Метод является слотом; showNextYear() — отображает страницу с текущим месяцем в следующем году. Выбран- ная дата при этом не изменяется. Метод является слотом; setFirstDayOfWeek(<День>) — задает первый день недели. По умолчанию используется воскресенье. Чтобы первым днем недели сделать понедельник, следует в качестве пара- метра указать атрибут Monday класса QtCore.Qt ; setNavigationBarVisible(<Флаг>) — если в качестве параметра указано значение False , то панель навигации выводиться не будет. Метод является слотом; setHorizontalHeaderFormat(<Формат>) — задает формат горизонтального заголовка. В качестве параметра можно указать следующие атрибуты класса QCalendarWidget : • NoHorizontalHeader — 0 — заголовок не отображается; • SingleLetterDayNames — 1 — отображается только первая буква из названия дня не- дели; • ShortDayNames — 2 — отображается сокращенное название дня недели; • LongDayNames — 3 — отображается полное название дня недели; setVerticalHeaderFormat(<Формат>) — задает формат вертикального заголовка. В каче- стве параметра можно указать следующие атрибуты класса QCalendarWidget : • NoVerticalHeader — 0 — заголовок не отображается; • ISOWeekNumbers — 1 — отображается номер недели в году; setGridVisible(<Флаг>) — если в качестве параметра указано значение True , линии сет- ки будут отображены. Метод является слотом; setSelectionMode(<Режим>) — задает режим выделения даты. В качестве параметра можно указать следующие атрибуты класса QCalendarWidget : • NoSelection — 0 — дата не может быть выбрана пользователем; • SingleSelection — 1 — может быть выбрана одна дата; setHeaderTextFormat( — задает формат ячеек заголовка. В параметре указывается экземпляр класса QTextCharFormat из модуля QtGui ; setWeekdayTextFormat(<День недели>, — определяет формат ячеек для указанного дня недели. В первом параметре задаются атрибуты Monday , Tuesday , Wednesday , Thursday , Friday , Saturday или Sunday класса QtCore.Qt , а во втором парамет- ре — экземпляр класса QTextCharFormat ; setDateTextFormat( — задает формат ячейки с указанной датой. В первом параметре указывается экземпляр класса QDate или экземпляр класса date из языка Python, а во втором параметре — экземпляр класса QTextCharFormat Класс QCalendarWidget поддерживает такие сигналы: activated( — генерируется при двойном щелчке мышью или нажатии клавиши 488 Часть II. Библиотека PyQt 5 clicked( — генерируется при щелчке мышью на доступной дате. Внутри обра- ботчика через параметр доступна выбранная дата; currentPageChanged(<Год>, <Месяц>) — генерируется при изменении страницы. Внутри обработчика через первый параметр доступен год, а через второй — месяц. Обе величи- ны задаются целыми числами; selectionChanged — генерируется при изменении выбранной даты пользователем или из программного кода. 21.11. Электронный индикатор Класс QLCDNumber реализует электронный индикатор, в котором цифры и буквы отобража- ются отдельными сегментами — как на электронных часах или дисплее калькулятора (рис. 21.5). Индикатор позволяет отображать числа в двоичной, восьмеричной, десятичной и шестнадцатеричной системах счисления. Иерархия наследования выглядит так: (QObject, QPaintDevice) — QWidget — QFrame — QLCDNumber Рис. 21.5. Компонент QLCDNumber Форматы конструктора класса QLCDNumber : <Объект> = QLCDNumber([parent=<Родитель>]) <Объект> = QLCDNumber(<Количество цифр>[, parent=<Родитель>]) В параметре <Количество цифр> указывается количество отображаемых цифр — если оно не указано, используется значение 5 Класс QLCDNumber поддерживает следующие методы (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt-5/qlcdnumber.html): display(<Значение>) — задает новое значение. В качестве параметра можно указать целое число, вещественное число или строку: lcd.display(1048576) Метод является слотом; checkOverflow(<Число>) — возвращает значение True , если целое или вещественное число, указанное в параметре, не может быть отображено индикатором. В противном случае возвращает значение False ; intValue() — возвращает значение индикатора в виде целого числа; value() — возвращает значение индикатора в виде вещественного числа; setSegmentStyle(<Стиль>) — задает стиль индикатора. В качестве параметра можно ука- зать атрибуты Outline , Filled или Flat класса QLCDNumber ; setMode(<Режим>) — задает режим отображения чисел. В качестве параметра можно ука- зать следующие атрибуты класса QLCDNumber : Глава 21. Основные компоненты 489 • Hex — 0 — шестнадцатеричное значение; • Dec — 1 — десятичное значение; • Oct — 2 — восьмеричное значение; • Bin — 3 — двоичное значение. Вместо метода setMode() удобнее воспользоваться методами-слотами setHexMode() , setDecMode() , setOctMode() и setBinMode() ; setSmallDecimalPoint(<Флаг>) — если в качестве параметра указано значение True , десятичная точка будет отображаться как отдельный элемент (при этом значение выво- дится более компактно без пробелов до и после точки), а если значение False — то деся- тичная точка будет занимать позицию цифры (значение используется по умолчанию). Метод является слотом; setDigitCount(<Число>) — задает количество отображаемых цифр. Если в методе setSmallDecimalPoint() указано значение False , десятичная точка считается отдельной цифрой. Класс QLCDNumber поддерживает сигнал overflow , генерируемый при попытке задать значе- ние, которое не может быть отображено индикатором. 21.12. Индикатор хода процесса Класс QProgressBar реализует индикатор хода процесса, с помощью которого можно ин- формировать пользователя о текущем состоянии выполнения длительной операции. Иерар- хия наследования выглядит так: (QObject, QPaintDevice) — QWidget — QProgressBar Формат конструктора класса QProgressBar : <Объект> = QProgressBar([parent=<Родитель>]) Класс QProgressBar поддерживает следующий набор методов, которые могут быть нам полезны (полный их список смотрите на странице https://doc.qt.io/qt-5/qprogressbar.html): setValue(<Значение>) — задает новое целочисленное значение. Метод является слотом; value() — возвращает текущее значение индикатора в виде числа; text() — возвращает текст, отображаемый на индикаторе или рядом с ним; setRange(<Минимум>, <Максимум>) , setMinimum(<Минимум>) и setMaximum(<Максимум>) — задают минимальное и максимальное значения в виде целых чисел. Если оба значения равны нулю, то внутри индикатора будут постоянно по кругу перемещаться сегменты, показывая ход выполнения процесса с неопределенным количеством шагов. Методы яв- ляются слотами; reset() — сбрасывает значение индикатора. Метод является слотом; setOrientation(<Ориентация>) — задает ориентацию индикатора. В качестве значения указываются атрибуты Horizontal или Vertical класса QtCore.Qt . Метод является сло- том; setTextVisible(<Флаг>) — если в качестве параметра указано значение False , текст с текущим значением индикатора отображаться не будет; setTextDirection(<Направление>) — задает направление вывода текста при верти- кальной ориентации индикатора. Обратите внимание, что при использовании стилей 490 Часть II. Библиотека PyQt 5 "windows" , "windowsxp" и "macintosh" при вертикальной ориентации текст вообще не отображается. В качестве значения указываются следующие атрибуты класса QProgressBar : • TopToBottom — 0 — текст поворачивается на 90 градусов по часовой стрелке; • BottomToTop — 1 — текст поворачивается на 90 градусов против часовой стрелки; setInvertedAppearance(<Флаг>) — если в качестве параметра указано значение True , направление увеличения значения будет изменено на противоположное (например, не слева направо, а справа налево — при горизонтальной ориентации); setFormat(<Формат>) — задает формат вывода текстового представления значения. Па- раметром передается строка формата, в которой могут использоваться следующие спе- циальные символы: %v — само текущее значение, %m — заданный методами setMaximun() или setRange() максимум, %p — текущее значение в процентах: lcd.setFormat('Выполнено %v шагов из %m') При изменении значения индикатора генерируется сигнал valueChanged(<Новое значение>) Внутри обработчика через параметр доступно новое значение, заданное целым числом. 21.13. Шкала с ползунком Класс QSlider реализует шкалу с ползунком, который можно перемещать с помощью мыши или клавиатуры. Иерархия наследования выглядит так: (QObject, QPaintDevice) — QWidget — QAbstractSlider — QSlider Форматы конструктора класса QSlider : <Объект> = QSlider([parent=<Родитель>]) <Объект> = QSlider(<Ориентация>[, parent=<Родитель>]) Параметр <Ориентация> позволяет задать ориентацию шкалы. В качестве значения указыва- ются атрибуты Horizontal или Vertical (значение по умолчанию) класса QtCore.Qt Класс QSlider наследует следующие методы из класса QAbstractSlider (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt- 5/qabstractslider.html): setValue(<Значение>) — задает новое целочисленное значение. Метод является слотом; value() — возвращает текущее значение в виде числа; setSliderPosition(<Значение>) — задает текущее положение ползунка; sliderPosition() — возвращает текущее положение ползунка в виде числа. Если отсле- живание перемещения ползунка включено (принято по умолчанию), то возвращаемое значение будет совпадать со значением, возвращаемым методом value() . Если отслежи- вание выключено, то при перемещении метод sliderPosition() вернет текущее положе- ние, а метод value() — положение, которое имел ползунок до перемещения; setRange(<Минимум>, <Максимум>) , setMinimum(<Минимум>) и setMaximum(<Максимум>) — задают минимальное и максимальное значения, представленные целыми числами. Ме- тод setRange() является слотом; setOrientation(<Ориентация>) — задает ориентацию шкалы. В качестве значения ука- зываются атрибуты Horizontal или Vertical класса QtCore.Qt . Метод является слотом; Глава 21. Основные компоненты 491 setSingleStep(<Значение>) — задает значение, на которое сдвинется ползунок при на- жатии клавиш со стрелками; setPageStep(<Значение>) — задает значение, на которое сдвинется ползунок при нажа- тии клавиш и , повороте колесика мыши или щелчке мышью на шкале; setInvertedAppearance(<Флаг>) — если в качестве параметра указано значение True , направление увеличения значения будет изменено на противоположное (например, не слева направо, а справа налево — при горизонтальной ориентации); setInvertedControls(<Флаг>) — если в качестве параметра указано значение False , то при изменении направления увеличения значения будет изменено и направление пере- мещения ползунка при нажатии клавиш и , повороте колесика мыши и нажатии клавиш со стрелками вверх и вниз; setTracking(<Флаг>) — если в качестве параметра указано значение True , отслеживание перемещения ползунка будет включено (принято по умолчанию). При этом сигнал valueChanged при перемещении ползунка станет генерироваться постоянно. Если в каче- стве параметра указано значение False , то сигнал valueChanged будет сгенерирован только при отпускании ползунка; hasTracking() — возвращает значение True , если отслеживание перемещения ползунка включено, и False — в противном случае. Класс QAbstractSlider поддерживает сигналы: actionTriggered(<Действие>) — генерируется, когда производится взаимодействие с ползунком (например, при нажатии клавиши ). Внутри обработчика через параметр доступно произведенное действие, которое описывается целым числом. Также можно использовать атрибуты SliderNoAction ( 0 ), SliderSingleStepAdd ( 1 ), SliderSingleStepSub ( 2 ), SliderPageStepAdd ( 3 ), SliderPageStepSub ( 4 ), SliderToMinimum ( 5 ), SliderToMaximum ( 6 ) и SliderMove ( 7 ) класса QAbstractSlider ; rangeChanged(<Минимум>, <Максимум>) — генерируется при изменении диапазона значе- ний. Внутри обработчика через параметры доступны новые минимальное и максималь- ное значения, заданные целыми числами; sliderPressed — генерируется при нажатии ползунка; sliderMoved(<Положение>) — генерируется постоянно при перемещении ползунка. Внутри обработчика через параметр доступно новое положение ползунка, выраженное целым числом; sliderReleased — генерируется при отпускании ранее нажатого ползунка; valueChanged(<Значение>) — генерируется при изменении значения. Внутри обработчи- ка через параметр доступно новое значение в виде целого числа. Класс QSlider дополнительно определяет следующие методы (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt-5/qslider.html): setTickPosition(<Позиция>) — задает позицию рисок. В качестве параметра указывают- ся следующие атрибуты класса QSlider : • NoTicks — без рисок; • TicksBothSides — риски по обе стороны; • TicksAbove — риски выводятся сверху; 492 Часть II. Библиотека PyQt 5 • TicksBelow — риски выводятся снизу; • TicksLeft — риски выводятся слева; • TicksRight — риски выводятся справа; setTickInterval(<Расстояние>) — задает расстояние между рисками. 21.14. Круговая шкала с ползунком Класс QDial реализует круглую шкалу с ползунком, который можно перемещать по кругу с помощью мыши или клавиатуры. Компонент, показанный на рис. 21.6, напоминает регу- лятор, используемый в различных устройствах для изменения или отображения каких-либо настроек. Иерархия наследования: (QObject, QPaintDevice) — QWidget — QAbstractSlider — QDial Рис. 21.6. Компонент QDial Формат конструктора класса QDial : <Объект> = QDial([parent=<Родитель>]) Класс QDial наследует все методы и сигналы класса QAbstractSlider (см. разд. 21.13) и оп- ределяет несколько дополнительных методов (здесь приведена только часть методов — полный их список смотрите на странице https://doc.qt.io/qt-5/qdial.html): setNotchesVisible(<Флаг>) — если в качестве параметра указано значение True , будут отображены риски. По умолчанию риски не выводятся. Метод является слотом; setNotchTarget(<Значение>) — задает рекомендуемое количество пикселов между рис- ками. В качестве параметра указывается вещественное число; setWrapping(<Флаг>) — если в качестве параметра указано значение True , то начало шкалы будет совпадать с ее концом. По умолчанию между началом шкалы и концом расположено пустое пространство. Метод является слотом. 21.15. Полоса прокрутки Класс QScrollBar представляет горизонтальную или вертикальную полосу прокрутки. Изменить положение ползунка на полосе можно нажатием на кнопки, расположенные по краям полосы, щелчками мышью на полосе, собственно перемещением ползунка мышью, Глава 21. Основные компоненты 493 нажатием клавиш на клавиатуре, а также выбрав соответствующий пункт из контекстного меню. Иерархия наследования: (QObject, QPaintDevice) — QWidget — QAbstractSlider — QScrollBar Форматы конструктора класса QScrollBar : <Объект> = QScrollBar([parent=<Родитель>]) <Объект> = QScrollBar(<Ориентация>[, parent=<Родитель>]) Параметр <Ориентация> позволяет задать ориентацию полосы прокрутки. В качестве значе- ния указываются атрибуты Horizontal или Vertical (значение по умолчанию) класса QtCore.Qt Класс QScrollBar наследует все методы и сигналы класса QAbstractSlider (см. разд. 21.13) и не определяет дополнительных методов. П РИМЕЧАНИЕ Полоса прокрутки редко используется отдельно. Гораздо удобнее воспользоваться об- ластью с полосами прокрутки, которую реализует класс QScrollArea (см. разд. 20.12). 21.16. Веб-браузер Класс QWebEngineView , определенный в модуле QtWebEngineWidgets , реализует полнофунк- циональный веб-браузер, поддерживающий HTML, CSS, JavaScript, вывод изображений и пр. (на рис. 21.7 в этом компоненте выведена главная страница Google). Иерархия насле- дования: (QObject, QPaintDevice) — QWidget — QWebEngineView Рис. 21.7. Компонент QWebEngineView 494 Часть II. Библиотека PyQt 5 Формат конструктора класса QWebEngineView : <Объект> = QWebEngineView([parent=<Родитель>]) П РИМЕЧАНИЕ До версии 5.5 библиотеки PyQt вывод веб-страниц осуществлялся средствами класса QWebView из модуля QtWebKitWidgets. Однако в версии 5.5 этот модуль был объявлен не- рекомендованным к использованию, а в версии 5.6 — удален. Класс QWebEngineView поддерживает следующие полезные для нас методы (полный их спи- сок смотрите на странице https://doc.qt.io/qt-5/qwebengineview.html): load( и setUrl( — загружают и выводят страницу с указанным в пара- метре адресом, который задается в виде экземпляра класса QUrl из модуля QtCore : web.load(QtCore.QUrl('https://www.google.ru/')) url() — возвращает адрес текущей страницы в виде экземпляра класса QUrl ; title() — возвращает заголовок (содержимое тега ) текущей страницы; setHtml( — задает HTML-код страницы, которая будет отображена в компоненте. Необязательный параметр baseUrl указывает базовый адрес, относительно которого бу- дут отсчитываться относительные адреса в гиперссылках, ссылках на файлы изображе- ний, таблицы стилей, файлы сценариев и пр. Если этот параметр не указан, в качестве значения по умолчанию используется «пустой» экземпляр класса QUrl , и относительные адреса будут отсчитываться от каталога, где находится сам файл страницы: wv.setHtml(" |