ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
setModified(<Флаг>) — если передано значение True , поле ввода помечается как изме- ненное, если False — как неизмененное; setEchoMode(<Режим>) — задает режим отображения текста. Могут быть указаны сле- дующие атрибуты класса QLineEdit : • Normal — 0 — показывать символы как они были введены; • NoEcho — 1 — не показывать вводимые символы; • Password — 2 — вместо символов выводить звездочки ( * ); • PasswordEchoOnEdit — 3 — показывать символы при вводе, а после потери фокуса вместо них отображать звездочки ( * ); setCompleter( — позволяет предлагать возможные варианты значений, начинающиеся с введенных пользователем символов. В качестве параметра указывается экземпляр класса QCompleter : lineEdit = QtWidgets.QLineEdit() arr = ["кадр", "каменный", "камень", "камера"] completer = QtWidgets.QCompleter(arr, parent=window) lineEdit.setCompleter(completer) setReadOnly(<Флаг>) — если в качестве параметра указано значение True , поле будет доступно только для чтения; isReadOnly() — возвращает значение True , если поле доступно только для чтения, и False — в противном случае; setAlignment(<Выравнивание>) — задает выравнивание текста внутри поля; setMaxLength(<Количество>) — задает максимальное количество символов; setFrame(<Флаг>) — если в качестве параметра указано значение False , поле будет ото- бражаться без рамки; setDragEnabled(<Флаг>) — если в качестве параметра указано значение True , режим перетаскивания текста из текстового поля с помощью мыши будет включен. По умолча- нию однострочное текстовое поле только принимает перетаскиваемый текст; setPlaceholderText(<Текст>) — задает текст подсказки, который будет выводиться в поле, когда оно не содержит значения и не имеет фокуса ввода; 466 Часть II. Библиотека PyQt 5 setTextMargins() — задает величины отступов от границ компонента до находящегося в нем текста. Форматы метода: setTextMargins(<Слева>, <Сверху>, <Справа>, <Снизу>) setTextMargins( setCursorPosition(<Индекс>) — задает положение текстового курсора; cursorPosition() — возвращает текущее положение текстового курсора; cursorForward(<Флаг>[, steps=1]) — перемещает текстовый курсор вперед на указан- ное во втором параметре количество символов. Если в первом параметре указано значе- ние True , выполняется выделение фрагмента; cursorBackward(<Флаг>[, steps=1]) — перемещает текстовый курсор назад на указан- ное во втором параметре количество символов. Если в первом параметре указано значе- ние True , выполняется выделение фрагмента; cursorWordForward(<Флаг>) — перемещает текстовый курсор вперед на одно слово. Если в параметре указано значение True , выполняется выделение фрагмента; cursorWordBackward(<Флаг>) — перемещает текстовый курсор назад на одно слово. Если в параметре указано значение True , выполняется выделение фрагмента; home(<Флаг>) — перемещает текстовый курсор в начало поля. Если в параметре указано значение True , выполняется выделение фрагмента; end(<Флаг>) — перемещает текстовый курсор в конец поля. Если в параметре указано значение True , выполняется выделение фрагмента; cut() — копирует выделенный текст в буфер обмена и удаляет его из поля при условии, что есть выделенный фрагмент и используется режим Normal . Метод является слотом; copy() — копирует выделенный текст в буфер обмена при условии, что есть выделен- ный фрагмент и используется режим Normal . Метод является слотом; paste() — вставляет текст из буфера обмена в текущую позицию текстового курсора при условии, что поле доступно для редактирования. Метод является слотом; undo() — отменяет последнюю операцию ввода пользователем при условии, что отмена возможна. Метод является слотом; redo() — повторяет последнюю отмененную операцию ввода пользователем, если это возможно. Метод является слотом; isUndoAvailable() — возвращает значение True , если можно отменить последнюю опе- рацию ввода, и False — в противном случае; isRedoAvailable() — возвращает значение True , если можно повторить последнюю от- мененную операцию ввода, и False — в противном случае; createStandardContextMenu() — создает стандартное меню, которое отображается при щелчке правой кнопкой мыши в текстовом поле. Чтобы изменить стандартное меню, следует создать класс, наследующий класс QLineEdit , и переопределить в нем метод contextMenuEvent(self, . Внутри этого метода можно создать свое собственное меню или добавить новый пункт в стандартное меню; setClearButtonEnabled(<Флаг>) — если передано True , в левой части непустого поля будет выводиться кнопка, нажатием которой можно очистить это поле, если False , кнопка очистки выводиться не будет. Глава 21. Основные компоненты 467 Класс QLineEdit поддерживает следующие сигналы: cursorPositionChanged(<Старая позиция>, <Новая позиция>) — генерируется при пере- мещении текстового курсора. Внутри обработчика через первый параметр доступна ста- рая позиция курсора, а через второй параметр — новая позиция. Оба параметра являют- ся целочисленными; editingFinished — генерируется при нажатии клавиши returnPressed — генерируется при нажатии клавиши selectionChanged — генерируется при изменении выделения; textChanged(<Новый текст>) — генерируется при изменении текста внутри поля пользо- вателем или программно. Внутри обработчика через параметр доступен новый текст в виде строки; textEdited(<Новый текст>) — генерируется при изменении текста внутри поля пользо- вателем. При задании текста вызовом метода setText() не генерируется. Внутри обра- ботчика через параметр доступен новый текст в виде строки. 21.5.2. Ввод данных по маске С помощью метода setInputMask(<Маска>) можно ограничить ввод символов допустимым диапазоном значений. В качестве параметра указывается строка, имеющая следующий формат: "<Последовательность символов>[;<Символ-заполнитель>]" В первом параметре указывается комбинация из следующих специальных символов: 9 — обязательна цифра от 0 до 9 ; 0 — разрешена, но не обязательна цифра от 0 до 9 ; D — обязательна цифра от 1 до 9 ; d — разрешена, но не обязательна цифра от 1 до 9 ; B — обязательна цифра 0 или 1 ; b — разрешена, но не обязательна цифра 0 или 1 ; H — обязателен шестнадцатеричный символ ( 0-9 , A-F , a-f ); h — разрешен, но не обязателен шестнадцатеричный символ ( 0-9 , A-F , a-f ); # — разрешена, но не обязательна цифра, знак плюс или минус; A — обязательна буква в любом регистре; a — разрешена, но не обязательна буква; N — обязательна буква в любом регистре или цифра от 0 до 9 ; n — разрешена, но не обязательна буква или цифра от 0 до 9 ; X — обязателен любой символ; x — разрешен, но не обязателен любой символ; > — все последующие буквы переводятся в верхний регистр; < — все последующие буквы переводятся в нижний регистр; 468 Часть II. Библиотека PyQt 5 ! — отключает изменение регистра; \ — используется для отмены действия спецсимволов. Все остальные символы трактуются как есть. В необязательном параметре <Символ- заполнитель> можно указать символ, который будет отображаться в поле, обозначая место ввода. Если параметр не указан, заполнителем будет служить пробел: lineEdit.setInputMask("Дата: 99.B9.9999;_") # Дата: __.__.____ lineEdit.setInputMask("Дата: 99.B9.9999;#") # Дата: ##.##.#### lineEdit.setInputMask("Дата: 99.B9.9999 г.") # Дата: . . г. Проверить соответствие введенных данных маске позволяет метод hasAcceptableInput() Если данные соответствуют маске, метод возвращает значение True , а в противном слу- чае — False 21.5.3. Контроль ввода Контролировать ввод данных позволяет метод setValidator( . В качестве па- раметра указывается экземпляр класса, наследующего класс QValidator из модуля QtGui Существуют следующие стандартные классы, позволяющие контролировать ввод данных: QIntValidator — допускает ввод только целых чисел. Функциональность класса зависит от настройки локали. Форматы конструктора: QIntValidator([parent=None]) QIntValidator(<Минимальное значение>, <Максимальное значение> [, parent=None]) Пример ограничения ввода диапазоном целых чисел от 0 до 100 : lineEdit.setValidator(QtGui.QIntValidator(0, 100, parent=window)) QDoubleValidator — допускает ввод только вещественных чисел. Функциональность класса зависит от настройки локали. Форматы конструктора: QDoubleValidator([parent=None]) QDoubleValidator(<Минимальное значение>, <Максимальное значение>, <Количество цифр после точки>[, parent=None]) Пример ограничения ввода диапазоном вещественных чисел от 0.0 до 100.0 . и двумя цифрами после десятичной точки: lineEdit.setValidator( QtGui.QDoubleValidator(0.0, 100.0, 2, parent=window)) Чтобы позволить вводить числа в экспоненциальной форме, необходимо передать зна- чение атрибута ScientificNotation в метод setNotation() . Если передать значение атрибута StandardNotation , будет разрешено вводить числа только в десятичной форме: validator = QtGui.QDoubleValidator(0.0, 100.0, 2, parent=window) validator.setNotation(QtGui.QDoubleValidator.StandardNotation) lineEdit.setValidator(validator) QRegExpValidator — позволяет проверить данные на соответствие регулярному выраже- нию. Форматы конструктора: QRegExpValidator([parent=None]) QRegExpValidator( Глава 21. Основные компоненты 469 Пример ввода только цифр от 0 до 9 : validator = QtGui.QRegExpValidator( QtCore.QRegExp("[0-9]+"), parent=window) lineEdit.setValidator(validator) Обратите внимание, что здесь производится проверка полного соответствия шаблону, поэтому символы ^ и $ явным образом указывать не нужно. Проверить соответствие введенных данных условию позволяет метод hasAcceptableInput() Если данные соответствуют условию, метод возвращает значение True , а в противном слу- чае — False 21.6. Многострочное текстовое поле Многострочное текстовое поле предназначено для ввода и редактирования как простого текста, так и текста в формате HTML. Поле поддерживает технологию drag & drop, стан- дартные комбинации клавиш быстрого доступа, работу с буфером обмена и многое другое. Многострочное текстовое поле реализуется с помощью класса QTextEdit . Иерархия насле- дования: (QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea — QTextEdit Конструктор класса QTextEdit имеет два формата вызова: <Объект> = QTextEdit([parent=<Родитель>]) <Объект> = QTextEdit(<Текст>[, parent=<Родитель>]) В параметре parent указывается ссылка на родительский компонент. Если параметр не ука- зан или имеет значение None , компонент будет обладать своим собственным окном. Пара- метр <Текст> позволяет задать текст в формате HTML, который будет отображен в тексто- вом поле. П РИМЕЧАНИЕ Класс QTextEdit предназначен для отображения как простого текста, так и текста в форма- те HTML. Если поддержка HTML не нужна, то следует воспользоваться классом QPlainTextEdit , который оптимизирован для работы с простым текстом большого объема. 21.6.1. Основные методы и сигналы Класс QTextEdit поддерживает следующие основные методы (полный их список смотрите на странице https://doc.qt.io/qt-5/qtextedit.html): setText(<Текст>) — помещает указанный текст в поле. Текст может быть простым или в формате HTML. Метод является слотом; setPlainText(<Текст>) — помещает в поле простой текст. Метод является слотом; setHtml(<Текст>) — помещает в поле текст в формате HTML. Метод является слотом; insertPlainText(<Текст>) — вставляет простой текст в текущую позицию текстового курсора. Если в поле был выделен фрагмент, он будет удален. Метод является слотом; insertHtml(<Текст>) — вставляет текст в формате HTML в текущую позицию текстово- го курсора. Если в поле был выделен фрагмент, он будет удален. Метод является слотом; 470 Часть II. Библиотека PyQt 5 append(<Текст>) — добавляет новый абзац с указанным текстом в формате HTML в ко- нец поля. Метод является слотом; setDocumentTitle(<Текст>) — задает текст заголовка документа (для тега ); documentTitle() — возвращает текст заголовка (из тега ); toPlainText() — возвращает простой текст, содержащийся в текстовом поле; toHtml() — возвращает текст в формате HTML; clear() — удаляет весь текст из поля. Метод является слотом; selectAll() — выделяет весь текст в поле. Метод является слотом; zoomIn([range=1]) — увеличивает размер шрифта. Метод является слотом; zoomOut([range=1]) — уменьшает размер шрифта. Метод является слотом; cut() — копирует выделенный текст в буфер обмена и удаляет его из поля при условии, что есть выделенный фрагмент. Метод является слотом; copy() — копирует выделенный текст в буфер обмена при условии, что есть выделен- ный фрагмент. Метод является слотом; paste() — вставляет текст из буфера обмена в текущую позицию текстового курсора при условии, что поле доступно для редактирования. Метод является слотом; canPaste() — возвращает True , если из буфера обмена можно вставить текст, и False — в противном случае; setAcceptRichText(<Флаг>) — если в качестве параметра указано значение True , в поле можно будет ввести, вставить из буфера обмена или при помощи перетаскивания текст в формате HTML. Значение False дает возможность заносить в поле лишь обычный текст; acceptRichText() — возвращает значение True , если в поле можно занести текст в фор- мате HTML, и False — если доступно занесение лишь обычного текста; undo() — отменяет последнюю операцию ввода пользователем при условии, что отмена возможна. Метод является слотом; redo() — повторяет последнюю отмененную операцию ввода пользователем, если это возможно. Метод является слотом; setUndoRedoEnabled(<Флаг>) — если в качестве значения указано значение True , опера- ции отмены и повтора действий разрешены, а если False — то запрещены; isUndoRedoEnabled() — возвращает значение True , если операции отмены и повтора действий разрешены, и False — если запрещены; createStandardContextMenu([ — создает стандартное меню, которое отобра- жается при щелчке правой кнопкой мыши в текстовом поле. Чтобы изменить стандарт- ное меню, следует создать класс, наследующий класс QTextEdit , и переопределить в нем метод contextMenuEvent(self, . Внутри этого метода можно создать свое соб- ственное меню или добавить новый пункт в стандартное меню; ensureCursorVisible() — прокручивает область таким образом, чтобы текстовый курсор оказался в зоне видимости; find() — производит поиск фрагмента (по умолчанию в прямом направлении без учета регистра символов) в текстовом поле. Если фрагмент найден, он выделяется, и метод возвращает значение True , в противном случае — значение False . Форматы метода: Глава 21. Основные компоненты 471 find(<Искомый текст>[, <Режим>]) find( Искомый текст можно указать либо строкой, либо регулярным выражением, представ- ленным экземпляром класса QRegExp . В необязательном параметре <Режим> можно указать комбинацию (через оператор | ) следующих атрибутов класса QTextDocument из модуля QtGui : • FindBackward — 1 — поиск в обратном, а не в прямом направлении; • FindCaseSensitively — 2 — поиск с учетом регистра символов; • FindWholeWords — 4 — поиск целых слов, а не фрагментов; print( — отправляет содержимое текстового поля на печать. В качестве параметра указывается экземпляр одного из классов, порожденных от QPagedPaintDevice : QPrinter или QPdfWriter . Вот пример вывода документа в файл в формате PDF: pdf = QtGui.QPdfWriter("document.pdf") textEdit.print(pdf) Класс QTextEdit поддерживает следующие сигналы: currentCharFormatChanged( — генерируется при изменении формата текста. Внутри обработчика через параметр доступен новый формат; cursorPositionChanged — генерируется при изменении положения текстового курсора; selectionChanged — генерируется при изменении выделения текста; textChanged — генерируется при изменении текста в поле; copyAvailable(<Флаг>) — генерируется при выделении текста или, наоборот, снятии выделения. Значение параметра True указывает, что фрагмент выделен, и его можно скопировать, значение False — обратное; undoAvailable(<Флаг>) — генерируется при изменении возможности отменить опера- цию ввода. Значение параметра True указывает, что операция ввода может быть отмене- на, значение False говорит об обратном; redoAvailable(<Флаг>) — генерируется при изменении возможности повторить отме- ненную операцию ввода. Значение параметра True обозначает возможность повтора от- мененной операции, а значение |