ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
полужирный") Глава 21. Основные компоненты 459 Перевод строки в простом тексте осуществляется с помощью символа \n , а в тексте в формате HTML — с помощью тега : label.setText("Текст\nна двух строках") Внутри текста символ & , указанный перед буквой или цифрой, задает комбинацию кла- виш быстрого доступа. В этом случае буква, перед которой указан символ & , будет — в качестве подсказки пользователю — подчеркнута. При одновременном нажатии кла- виши , окажется в фокусе ввода. Чтобы вывести сам символ & , необходимо его уд- воить. Если надпись не связана с другим компонентом, символ & выводится в составе текста: label = QtWidgets.QLabel("&Пароль") lineEdit = QtWidgets.QLineEdit() label.setBuddy(lineEdit) Метод является слотом; setNum(<Число>) — преобразует целое или вещественное число в строку и отображает ее на надписи. Метод является слотом; setWordWrap(<Флаг>) — если в параметре указано значение True , текст может перено- ситься на другую строку. По умолчанию перенос строк не осуществляется; text() — возвращает текст надписи; setTextFormat(<Режим>) — задает режим отображения текста. Могут быть указаны сле- дующие атрибуты класса QtCore.Qt : • PlainText — 0 — простой текст; • RichText — 1 — текст, отформатированный тегами HTML; • AutoText — 2 — автоматическое определение (режим по умолчанию). Если текст со- держит HTML-теги, то используется режим RichText , в противном случае — режим PlainText ; setAlignment(<Режим>) — задает режим выравнивания текста внутри надписи (допусти- мые значения мы рассматривали в разд. 20.2): label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignBottom) setOpenExternalLinks(<Флаг>) — если в качестве параметра указано значение True , теги , присутствующие в тексте, будут преобразованы в гиперссылки: label.setText('Это гиперссылка') label.setOpenExternalLinks(True) setBuddy(<Компонент>) — позволяет связать надпись с другим компонентом. В этом случае в тексте надписи можно задавать клавиши быстрого доступа, указав символ & пе- ред буквой или цифрой. После нажатия комбинации клавиш в фокусе ввода окажется компонент, ссылка на который передана в качестве параметра; setPixmap( — позволяет вывести изображение на надпись. В качестве пара- метра указывается экземпляр класса QPixmap : label.setPixmap(QtGui.QPixmap("picture.jpg")) Метод является слотом; setPicture( — позволяет вывести рисунок. В качестве параметра указыва- ется экземпляр класса QPicture . Метод является слотом; 460 Часть II. Библиотека PyQt 5 setMovie( — позволяет вывести анимацию. В качестве параметра указывается экземпляр класса QMovie . Метод является слотом; setScaledContents(<Флаг>) — если в параметре указано значение True , то при измене- нии размеров надписи размер содержимого также будет изменяться. По умолчанию из- менение размеров содержимого не осуществляется; setMargin(<Отступ>) — задает отступы от границ компонента до его содержимого; setIndent(<Отступ>) — задает отступ от рамки до текста надписи в зависимости от зна- чения выравнивания. Если выравнивание производится по левой стороне, то задает от- ступ слева, если по правой стороне, то справа; clear() — удаляет содержимое надписи. Метод является слотом; setTextInteractionFlags(<Режим>) — задает режим взаимодействия пользователя с тек- стом надписи. Можно указать следующие атрибуты (или их комбинацию через опера- тор | ) класса QtCore.Qt : • NoTextInteraction — 0 — пользователь не может взаимодействовать с текстом надписи; • TextSelectableByMouse — 1 — текст можно выделить мышью, чтобы, например, ско- пировать его в буфер обмена; • TextSelectableByKeyboard — 2 — текст можно выделить с помощью клавиш на кла- виатуре. Внутри надписи будет отображен текстовый курсор; • LinksAccessibleByMouse — 4 — на гиперссылках, присутствующих в тексте надписи, можно щелкать мышью; • LinksAccessibleByKeyboard — 8 — с гиперссылками, присутствующими в тексте надписи, допускается взаимодействовать с помощью клавиатуры: перемещаться ме- жду гиперссылками можно с помощью клавиши • TextEditable — 16 — текст надписи можно редактировать; • TextEditorInteraction — комбинация TextSelectableByMouse | TextSelectableByKeyboard | TextEditable ; • TextBrowserInteraction — комбинация TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard ; setSelection(<Индекс>, <Длина>) — выделяет фрагмент длиной <Длина> , начиная с по- зиции <Индекс> ; selectionStart() — возвращает начальный индекс выделенного фрагмента или значе- ние -1 , если ничего не выделено; selectedText() — возвращает выделенный текст или пустую строку, если ничего не вы- делено; hasSelectedText() — возвращает значение True , если фрагмент текста надписи выделен, и False — в противном случае. Класс QLabel поддерживает следующие сигналы: linkActivated( — генерируется при переходе по гиперссылке. Через параметр внутри обработчика доступен URL-адрес, заданный в виде строки; Глава 21. Основные компоненты 461 linkHovered( — генерируется при наведении указателя мыши на гиперссылку. Через параметр внутри обработчика доступен URL-адрес в виде строки или пустая строка. 21.2. Командная кнопка Командная кнопка используется для запуска какой-либо операции. Кнопка реализуется с помощью класса QPushButton . Иерархия наследования: (QObject, QPaintDevice) — QWidget — QAbstractButton — QPushButton Конструктор класса QPushButton имеет три формата: <Объект> = QPushButton([parent=<Родитель>]) <Объект> = QPushButton(<Текст>[, parent=<Родитель>]) <Объект> = QPushButton( В параметре parent указывается ссылка на родительский компонент. Если таковой не задан или имеет значение None , компонент будет обладать своим собственным окном. Параметр <Текст> позволяет задать текст, который отобразится на кнопке, а параметр — до- бавить перед текстом значок. Класс QPushButton наследует следующие методы из класса QAbstractButton (здесь приведе- ны только основные — полный их список смотрите на странице https://doc.qt.io/qt- 5/qabstractbutton.html): setText(<Текст>) — задает текст, который будет отображен на кнопке. Внутри текста символ & , указанный перед буквой или цифрой, задает комбинацию клавиш быстрого доступа. В этом случае буква, перед которой указан символ & , будет — в качестве под- сказки пользователю — подчеркнута. Одновременное нажатие клавиши & , необ- ходимо его удвоить; text() — возвращает текст, отображаемый на кнопке; setShortcut( — задает комбинацию клавиш быстрого доступа. Вот примеры указания значения: button.setShortcut("Alt+В") button.setShortcut(QtGui.QKeySequence.mnemonic("&В")) button.setShortcut(QtGui.QKeySequence("Alt+В")) button.setShortcut( QtGui.QKeySequence(QtCore.Qt.ALT + QtCore.Qt.Key_E)) setIcon( — вставляет значок перед текстом кнопки; setIconSize( — задает размеры значка в виде экземпляра класса QSize . Метод является слотом; setAutoRepeat(<Флаг>) — если в качестве параметра указано значение True , сигнал clicked будет периодически генерироваться, пока кнопка находится в нажатом состоя- нии. Примером являются кнопки, изменяющие значение полосы прокрутки; animateClick([<Интервал>]) — имитирует нажатие кнопки пользователем. После нажа- тия кнопка находится в этом состоянии указанный промежуток времени, по истечении которого отпускается. Значение указывается в миллисекундах. Если параметр не указан, то интервал равен 100 миллисекундам. Метод является слотом; 462 Часть II. Библиотека PyQt 5 click() — имитирует нажатие кнопки без анимации. Метод является слотом; setCheckable(<Флаг>) — если в качестве параметра указано значение True , то кнопка является переключателем, который может находиться в двух состояниях: установленном и неустановленном; setChecked(<Флаг>) — если в качестве параметра указано значение True , кнопка- переключатель будет находиться в установленном состоянии. Метод является слотом; isChecked() — возвращает значение True , если кнопка находится в установленном со- стоянии, и False — в противном случае; toggle() — переключает кнопку. Метод является слотом; setAutoExclusive(<Флаг>) — если в качестве параметра указано значение True , внутри контейнера может быть установлена только одна кнопка-переключатель; setDown(<Флаг>) — если в качестве параметра указано значение True , кнопка будет на- ходиться в нажатом состоянии; isDown() — возвращает значение True , если кнопка находится в нажатом состоянии, и False — в противном случае. Кроме указанных состояний, кнопка может находиться в неактивном состоянии. Для этого необходимо передать значение False в метод setEnabled() , унаследованный от класса QWidget . Проверить, активна ли кнопка, позволяет метод isEnabled() , возвращающий зна- чение True , если кнопка находится в активном состоянии, и False — в противном случае. Это же касается и всех прочих компонентов, порожденных от класса QWidget Класс QAbstractButton поддерживает следующие сигналы: pressed — генерируется при нажатии кнопки; released — генерируется при отпускании ранее нажатой кнопки; clicked(<Состояние>) — генерируется при нажатии, а затем отпускании кнопки мыши над кнопкой. Именно для этого сигнала обычно назначают обработчики. Передаваемый обработчику параметр имеет значение True , если кнопка-переключатель установлена, и False , если она сброшена или это обычная кнопка, а не переключатель; toggled(<Состояние>) — генерируется при изменении состояния кнопки-переключателя. Через параметр доступно новое состояние кнопки. Класс QPushButton определяет свои собственные методы (здесь приведены только основ- ные — полный их список смотрите на странице https://doc.qt.io/qt-5/qpushbutton.html): setFlat(<Флаг>) — если в качестве параметра указано значение True , кнопка будет ото- бражаться без рамки; setAutoDefault(<Флаг>) — если в качестве параметра указано значение True , кнопка может быть нажата с помощью клавиши True , а для остальных окон — значение False ; setDefault(<Флаг>) — задает кнопку по умолчанию. Метод работает только в диалого- вых окнах. Эта кнопка может быть нажата с помощью клавиши setMenu( — устанавливает всплывающее меню, которое будет отображаться при нажатии кнопки. В качестве параметра указывается экземпляр класса QMenu ; Глава 21. Основные компоненты 463 menu() — возвращает ссылку на всплывающее меню или значение None ; showMenu() — отображает всплывающее меню. Метод является слотом. 21.3. Переключатель Переключатели (иногда их называют радиокнопками) всегда используются группами. В такой группе может быть установлен только один переключатель — при попытке устано- вить другой переключатель ранее установленный сбрасывается. Для объединения переклю- чателей в группу можно воспользоваться классом QGroupBox , который мы уже рассматрива- ли в разд. 20.7, а также классом QButtonGroup Переключатель реализуется классом QRadioButton . Иерархия наследования: (QObject, QPaintDevice) — QWidget — QAbstractButton — QRadioButton Конструктор класса QRadioButton имеет два формата: <Объект> = QRadioButton([parent=<Родитель>]) <Объект> = QRadioButton(<Текст>[, parent=<Родитель>]) Класс QRadioButton наследует все методы класса QAbstractButton (см. разд. 21.2). Устано- вить или сбросить переключатель позволяет метод setChecked() , а проверить его текущее состояние можно с помощью метода isChecked() . Отследить изменение состояния можно в обработчике сигнала toggled(<Состояние>) , в параметре которого передается логическая величина, указывающая новое состояние переключателя. 21.4. Флажок Флажок предназначен для включения или выключения какой-либо опции и может нахо- диться в нескольких состояниях: установленном, сброшенном и промежуточном (неопреде- ленном) — последнее состояние может быть запрещено программно. Флажок реализуется с помощью класса QCheckBox . Иерархия наследования: (QObject, QPaintDevice) — QWidget — QAbstractButton — QCheckBox Конструктор класса QCheckBox имеет два формата: <Объект> = QCheckBox([parent=<Родитель>]) <Объект> = QCheckBox(<Текст>[, parent=<Родитель>]) Класс QCheckBox наследует все методы класса QAbstractButton (см. разд. 21.2), а также до- бавляет несколько новых: setCheckState(<Статус>) — задает состояние флажка. Могут быть указаны следующие атрибуты класса QtCore.Qt : • Unchecked — 0 — флажок сброшен; • PartiallyChecked — 1 — флажок находится в промежуточном состоянии; • Checked — 2 — флажок установлен; checkState() — возвращает текущее состояние флажка; setTristate([<Флаг>=True]) — если в качестве параметра указано значение True (значе- ние по умолчанию), флажок может находиться во всех трех состояниях. По умолчанию поддерживаются только установленное и сброшенное состояния; 464 Часть II. Библиотека PyQt 5 isTristate() — возвращает значение True , если флажок поддерживает три состояния, и False — если только два. Чтобы перехватить изменение состояния флажка, следует назначить обработчик сигнала stateChanged(<Состояние>) . Через параметр внутри обработчика доступно новое состояние флажка, заданное в виде целого числа. Если используется флажок, поддерживающий только два состояния, установить или сбро- сить его позволяет метод setChecked() , а проверить текущее состояние — метод isChecked() Обработать изменение состояния можно в обработчике сигнала toggled(<Состояние>) , па- раметр которого имеет логический тип. 21.5. Однострочное текстовое поле Однострочное текстовое поле предназначено для ввода и редактирования текста небольшо- го объема. С его помощью можно также отобразить вводимые символы в виде звездочек (чтобы скрыть пароль) или вообще не отображать их (что позволит скрыть длину пароля). Поле поддерживает технологию drag & drop, стандартные комбинации клавиш быстрого доступа, работу с буфером обмена и многое другое. Однострочное текстовое поле реализуется классом QLineEdit . Иерархия наследования: (QObject, QPaintDevice) — QWidget — QLineEdit Конструктор класса QLineEdit имеет два формата: <Объект> = QLineEdit([parent=<Родитель>]) <Объект> = QLineEdit(<Текст>[, parent=<Родитель>]) В параметре parent указывается ссылка на родительский компонент. Если родитель не ука- зан или имеет значение None , компонент будет обладать своим собственным окном. Пара- метр <Текст> позволяет задать текст, который будет отображен в текстовом поле. 21.5.1. Основные методы и сигналы Класс QLineEdit поддерживает следующие методы (полный их список смотрите на страни- це https://doc.qt.io/qt-5/qlineedit.html): setText(<Текст>) — помещает указанный текст в поле. Метод является слотом; insert(<Текст>) — вставляет текст в текущую позицию текстового курсора. Если в поле был выделен фрагмент, он будет удален; text() — возвращает текст, содержащийся в текстовом поле; displayText() — возвращает текст, который видит пользователь. Результат зависит от режима отображения, заданного с помощью метода setEchoMode() , — например, в ре- жиме Password строка будет состоять из звездочек; clear() — удаляет весь текст из поля. Метод является слотом; backspace() — удаляет выделенный фрагмент. Если выделенного фрагмента нет, удаля- ет символ, стоящий слева от текстового курсора; del() — удаляет выделенный фрагмент. Если выделенного фрагмента нет, удаляет сим- вол, стоящий справа от текстового курсора; Глава 21. Основные компоненты 465 setSelection(<Индекс>, <Длина>) — выделяет фрагмент длиной <Длина> , начиная с по- зиции <Индекс> . Во втором параметре можно указать отрицательное значение; selectedText() — возвращает выделенный фрагмент или пустую строку, если ничего не выделено; selectAll() — выделяет весь текст в поле. Метод является слотом; selectionStart() — возвращает начальный индекс выделенного фрагмента или значе- ние -1 , если ничего не выделено; hasSelectedText() — возвращает значение True , если поле содержит выделенный фраг- мент, и False — в противном случае; deselect() — снимает выделение; isModified() — возвращает True , если текст в поле был изменен пользователем, и False — в противном случае. Отметьте, что вызов метода setText() помечает поле как неизмененное; |