ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
True . В качестве его значения можно указать один из многочисленных атрибутов класса QtCore.Qt , список которых приведен на странице https://doc.qt.io/qt-5/qt.html#InputMethodHint-enum, или их комбинацию через оператор | Метод возвращает кортеж из двух элементов: (<Значение>, <Статус>) . Через первый эле- мент доступен текст выбранного пункта, а через второй — значение True , если была нажата кнопка OK, или значение False , если были нажаты кнопка Cancel, клавиша Глава 26. Диалоговые окна 631 s, ok = QtWidgets.QInputDialog.getItem(window, "Это заголовок окна", "Это текст подсказки", ["Пункт 1", "Пункт 2", "Пункт 3"], current=1, editable=False) if ok: print("Текст выбранного пункта:", s) Результат выполнения этого кода показан на рис. 26.8. Рис. 26.8. Окно для выбора пункта из списка Рис. 26.9. Окно для ввода большого фрагмента текста 26.4.6. Окно для ввода большого текста Окно для ввода большого фрагмента обычного текста реализуется статическим методом getMultiLineText() . Формат метода: getMultiLineText(<Родитель>, <Текст заголовка>, <Текст подсказки>[, text=""][, flags=0][, inputMethodHints=QtCore.Qt.ImhNone]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Параметр text устанавливает значение поля по умолчанию, а в параметре flags можно указать тип окна. Параметр inputMethodHints указывает дополнительные опции текстового поля, которое будет присутствовать в выведенном окне. В качестве его значения можно указать один из многочисленных атрибутов класса QtCore.Qt , список которых приведен на странице https://doc.qt.io/qt-5/qt.html#InputMethodHint-enum , или их комбинацию через опера- тор | Метод getMultiLineText() возвращает кортеж из двух элементов: (<Значение>, <Статус>) Через первый элемент доступно введенное значение, а через второй — значение True , если была нажата кнопка OK, или значение False , если были нажаты кнопка Cancel, клавиша "Это текст подсказки", text = "Текст\nТекст\nТекст") if ok: print("Текст выбранного пункта:", s) Результат выполнения этого кода показан на рис. 26.9. 632 Часть II. Библиотека PyQt 5 26.5. Класс QFileDialog Класс QFileDialog реализует модальные диалоговые окна для выбора файла или каталога. Иерархия наследования для него выглядит так: (QObject, QPaintDevice) — QWidget — QDialog — QFileDialog Форматы конструктора класса QFileDialog : <Объект> = QFileDialog(<Родитель>, <Тип окна>) <Объект> = QFileDialog([parent=None][, caption=""][, directory=""][, filter=""]) Если в параметрах <Родитель> и parent указана ссылка на родительское окно, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Параметр <Тип окна> задает тип окна (см. разд. 18.2). Необязательный параметр caption позволяет указать заголовок окна, параметр directory — начальный каталог, а параметр filter — фильтр для отбора файлов, которые будут выведены в диалоговом окне (напри- мер, фильтр "Images (*.png *.jpg)" задаст вывод только файлов с расширениями png и jpg ). После создания экземпляра класса следует вызвать метод exec() (или оставленный для со- вместимости с предыдущими версиями PyQt метод exec_() ), чтобы вывести диалоговое окно на экран. Метод возвращает код возврата в виде значения атрибутов Accepted или Rejected класса QDialog 26.5.1. Основные методы и сигналы Класс QFileDialog наследует все методы базовых классов и определяет следующие собст- венные методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qfiledialog.html): setAcceptMode(<Тип>) — задает тип окна. В качестве параметра указываются следующие атрибуты класса QFileDialog : • AcceptOpen — 0 — окно для открытия файла (по умолчанию); • AcceptSave — 1 — окно для сохранения файла; setViewMode(<Режим>) — задает режим вывода списка файлов. В качестве параметра ука- зываются следующие атрибуты класса QFileDialog : • Detail — 0 — отображается подробная информация о файлах; • List — 1 — отображается только значок и название файла; setFileMode(<Тип>) — задает тип возвращаемого значения. В качестве параметра указы- ваются следующие атрибуты класса QFileDialog : • AnyFile — 0 — любой файл независимо от того, существует он или нет; • ExistingFile — 1 — существующий файл; • Directory — 2 — каталог; • ExistingFiles — 3 — список из нескольких существующих файлов. Несколько фай- лов можно выбрать, удерживая нажатой клавишу setOption(<Опция>[, on=True]) — если во втором параметре указано значение True , указанная в первом параметре опция будет установлена, а если False — сброшена. В первом параметре можно указать следующие атрибуты класса QFileDialog (здесь Глава 26. Диалоговые окна 633 приведены только основные — полный их список можно найти на странице https:// doc.qt.io/qt-5/qfiledialog.html#Option-enum ): • ShowDirsOnly — отображать только названия каталогов. Опция работает только при использовании типа возвращаемого значения Directory ; • DontConfirmOverwrite — не спрашивать разрешения на перезапись существующего файла; • ReadOnly — режим только для чтения; • HideNameFilterDetails — скрывает детали фильтра; setOptions(<Опции>) — позволяет установить сразу несколько опций; setDirectory() — задает отображаемый каталог. Форматы метода: setDirectory(<Путь>) setDirectory( directory() — возвращает экземпляр класса QDir с путем к отображаемому каталогу; setDirectoryUrl( — задает отображаемый каталог в виде экземпляра класса QUrl из модуля QtCore : dialog.setDirectoryUrl(QtCore.QUrl.fromLocalFile("C:\\book")) directoryUrl() — возвращает экземпляр класса QUrl с путем к отображаемому каталогу; setNameFilter(<Фильтр>) — устанавливает фильтр. Чтобы установить несколько фильт- ров, необходимо указать их через две точки с запятой: dialog.setNameFilter("All (*);;Images (*.png *.jpg)") setNameFilters(<Список фильтров>) — устанавливает сразу несколько фильтров: dialog.setNameFilters(["All (*)", "Images (*.png *.jpg)"]) selectFile(<Название файла>) — выбирает указанный файл; selectUrl( — выбирает файл, указанный в виде экземпляра класса QUrl ; selectedFiles() — возвращает список с выбранными файлами; selectedUrls() — возвращает список экземпляров класса QUrl , представляющих вы- бранные файлы; setDefaultSuffix(<Расширение>) — задает расширение, которое добавляется к файлу при отсутствии указанного расширения; setHistory(<Список>) — задает список истории; setSidebarUrls(<Список с QUrl>) — задает список папок, отображаемый на боковой панели: dialog.setSidebarUrls([QtCore.QUrl.fromLocalFile("C:\\book"), QtCore.QUrl.fromLocalFile("C:\\book\\eclipse")]) setLabelText(<Тип надписи>, <Текст>) — позволяет изменить текст указанной надписи. В первом параметре указываются следующие атрибуты класса QFileDialog : • LookIn — 0 — надпись слева от списка с каталогами; • FileName — 1 — надпись слева от поля с названием файла; • FileType — 2 — надпись слева от поля с типами файлов; 634 Часть II. Библиотека PyQt 5 • Accept — 3 — надпись на кнопке, нажатие которой приведет к подтверждению дей- ствия (по умолчанию Open или Save); • Reject — 4 — надпись на кнопке, нажатие которой приведет к отказу от действия (по умолчанию Cancel); saveState() — возвращает экземпляр класса QByteArray с текущими параметрами диа- логового окна; restoreState( — восстанавливает параметры диалогового окна и возвра- щает True , если восстановление прошло успешно, и False — в противном случае. Класс QFileDialog поддерживает следующие сигналы: currentChanged(<Путь>) — генерируется при изменении текущего файла. Внутри обра- ботчика через параметр доступен новый путь в виде строки; currentUrlChanged( — генерируется при изменении текущего файла. Внутри обработчика через параметр доступен новый путь; directoryEntered(<Путь>) — генерируется при изменении каталога. Внутри обработчи- ка через параметр доступен новый путь в виде строки; directoryUrlEntered( — генерируется при изменении каталога. Внутри обработ- чика через параметр доступен новый путь; fileSelected(<Путь>) — генерируется при выборе файла и подтверждении выбора. Внутри обработчика через параметр доступен путь в виде строки; filesSelected(<Список путей>) — генерируется при выборе нескольких файлов и под- тверждении выбора. Внутри обработчика через параметр доступен список с путями, за- данными в виде строк; urlSelected( — генерируется при выборе файла и подтверждении выбора. Внут- ри обработчика через параметр доступен путь; urlsSelected(<Список QUrl>) — генерируется при выборе нескольких файлов и под- тверждении выбора. Внутри обработчика через параметр доступен список с путями; filterSelected(<Фильтр>) — генерируется при изменении фильтра. Внутри обработчика через параметр доступен новый фильтр в виде строки. 26.5.2. Окно для выбора каталога Помимо рассмотренных методов, класс QFileDialog поддерживает несколько статических методов, реализующих типовые диалоговые окна. Окно для выбора каталога реализуется с помощью статических методов getExistingDirectory() и getExistingDirectoryUrl() . Форматы методов: getExistingDirectory([parent=None][, caption=""][, directory=""][, options=ShowDirsOnly]) getExistingDirectoryUrl([parent=None][, caption=""][, directory=QUrl()][, options=ShowDirsOnly]) В параметре parent указывается ссылка на родительское окно или значение None . Необяза- тельный параметр directory задает текущий каталог, а параметр options устанавливает опции (см. описание метода setOption() в разд. 26.5.1). Метод getExistingDirectory() воз- Глава 26. Диалоговые окна 635 вращает выбранный каталог или пустую строку, а метод getExistingDirectoryUrl() — экземпляр класса QUrl с выбранным путем или пустой экземпляр: dirName = QtWidgets.QFileDialog.getExistingDirectory(parent=window, directory=QtCore.QDir.currentPath()) dir = QtWidgets.QFileDialog.getExistingDirectoryUrl(parent=window, directory=QtCore.QUrl.fromLocalFile(QtCore.QDir.currentPath())) dirName = dir.toLocalFile() Результат выполнения этого кода показан на рис. 26.10. Рис. 26.10. Окно для выбора каталога 26.5.3. Окно для открытия файлов Окно для открытия одного файла реализуется с помощью статических методов getOpenFileName() и getOpenFileUrl() . Форматы методов: getOpenFileName([parent=None][, caption=""][,directory=""][, filter=""][, initialFilter=''][, options=0]) getOpenFileUrl([parent=None][, caption=""][,directory=""][, filter=""][, initialFilter=''][, options=0]) В параметре parent указывается ссылка на родительское окно или значение None . Необяза- тельный параметр caption задает текст заголовка окна, параметр directory — текущий каталог, параметр filter — фильтр, параметр initialFilter — фильтр, который будет выбран изначально, а параметр options устанавливает опции (см. описание метода setOption() в разд. 26.5.1). Метод getOpenFileName() возвращает кортеж из двух элементов: первым элементом будет выбранный файл или пустая строка, вторым — выбранный фильтр. Метод getOpenFileUrl() также возвращает кортеж из двух элементов: первый — 636 Часть II. Библиотека PyQt 5 экземпляр класса QUrl с путем выбранного файла или пустой экземпляр, второй — выбран- ный фильтр: file = QtWidgets.QFileDialog.getOpenFileName(parent=window, caption="Заголовок окна", directory="c:\\python36", filter="All (*);;Exes (*.exe *.dll)", initialFilter="Exes (*.exe *.dll)") fileName = file[0] file = QtWidgets.QFileDialog.getOpenFileUrl(parent=window, caption="Заголовок окна", directory="file:///c:\\python36", filter="All (*);;Exes (*.exe *.dll)", initialFilter="Exes (*.exe *.dll)") fileName = file[0].toLocalFile() Результат выполнения кода из последнего примера показан на рис. 26.11. Рис. 26.11. Окно для открытия файла Окно для открытия сразу нескольких файлов реализуется с помощью статических методов getOpenFileNames() и getOpenFileUrls() . Форматы методов: getOpenFileNames([parent=None][, caption=""][, directory=""][, filter=""][, initialFilter=''][, options=0]) getOpenFileUrls([parent=None][, caption=""][, directory=""][, filter=""][, initialFilter=''][, options=0]) Метод getOpenFileNames() возвращает кортеж из двух элементов: первый — список с путя- ми к выбранным файлам или пустой список, второй — выбранный фильтр. Метод getOpenFileUrls() также возвращает кортеж из двух элементов: первый — список экземп- ляров класса QUrl с путями к выбранным файлам или пустой список, второй — выбранный фильтр: Глава 26. Диалоговые окна 637 arr = QtWidgets.QFileDialog.getOpenFileNames(parent=window, caption="Заголовок окна", directory="c:\\python36", filter="All (*);;Exes (*.exe *.dll)", initialFilter="Exes (*.exe *.dll)") files = arr[0] arr = QtWidgets.QFileDialog.getOpenFileUrls(parent=window, caption="Заголовок окна", directory="file:///c:\\python36", filter="All (*);;Exes (*.exe *.dll)", initialFilter="Exes (*.exe *.dll)") files = list(a.toLocalFile() for a in arr[0]) 26.5.4. Окно для сохранения файла Окно для сохранения файла реализуется статическими методами getSaveFileName() и getSaveFileUrl() . Форматы методов: getSaveFileName([parent=None][, caption=""][, directory=""][, filter=""][, initialFilter=''][, options=0]) getSaveFileUrl([parent=None][, caption=""][, directory=""][, filter=""][, initialFilter=''][, options=0]) В параметре parent указывается ссылка на родительское окно или значение None . Необяза- тельный параметр caption задает текст заголовка окна, параметр directory — текущий каталог, параметр filter — фильтр, параметр initialFilter — фильтр, который будет вы- бран изначально, а параметр options устанавливает опции (см. описание метода setOption() в разд. 26.5.1). Метод getSaveFileName() возвращает кортеж из двух элементов: Рис. 26.12. Окно для сохранения файла 638 Часть II. Библиотека PyQt 5 первым элементом будет выбранный файл или пустая строка, вторым — выбранный фильтр. Метод getSaveFileUrl() также возвращает кортеж из двух элементов: первый — экземпляр класса QUrl с путем выбранного файла или пустой экземпляр, второй — выбран- ный фильтр: f = QtWidgets.QFileDialog.getSaveFileName(parent=window, caption="Заголовок окна", directory=QtCore.QDir.currentPath(), filter="All (*);;Python Code (*.py *.pyw)") fileName = f[0] f = QtWidgets.QFileDialog.getSaveFileUrl(parent=window, caption="Заголовок окна", directory="file:///" + QtCore.QDir.currentPath(), filter="All (*);;Python Code (*.py *.pyw)") fileName = f[0].toLocalFile() Результат выполнения кода из последнего примера показан на рис. 26.12. 26.6. Окно для выбора цвета Окно для выбора цвета (рис. 26.13) реализуется с помощью статического метода getColor() класса QColorDialog . Формат метода: getColor([initial=white][, parent=None][, title=""][, options=0]) Рис. 26.13. Окно для выбора цвета Параметр initial задает начальный цвет. В параметре parent указывается ссылка на роди- тельское окно или значение None . Параметр title позволяет указать заголовок окна. В па- раметре options могут быть указаны следующие атрибуты (или их комбинация) класса QColorDialog : Глава 26. Диалоговые окна 639 ShowAlphaChannel — пользователь может выбрать значение прозрачности; NoButtons — кнопки OK и Cancel не отображаются; DontUseNativeDialog — использовать встроенное в библиотеку Qt диалоговое окно вы- бора цвета вместо системного. Метод возвращает экземпляр класса QColor , представляющий выбранный цвет. Если поль- зователь нажмет кнопку Cancel, возвращенный экземпляр будет невалидным. Пример: color = QtWidgets.QColorDialog.getColor(initial=QtGui.QColor("#ff0000"), parent=window, title="Заголовок окна", options=QtWidgets.QColorDialog.ShowAlphaChannel) if color.isValid(): print(color.red(), color.green(), color.blue(), color.alpha()) 26.7. Окно для выбора шрифта Окно для выбора шрифта реализуется с помощью статического метода getFont() класса QFontDialog . Форматы метода: getFont([parent=None]) getFont( Параметр во втором формате задает начальный шрифт. В параметре parent указы- вается ссылка на родительское окно или значение None . Параметр caption позволяет указать заголовок окна. В параметре options могут быть указаны следующие атрибуты класса QFontDialog или их комбинация: NoButtons — кнопки OK и Cancel не отображаются; DontUseNativeDialog — использовать встроенное в библиотеку Qt диалоговое окно вы- бора шрифта вместо системного; ScalableFonts — масштабируемые шрифты; NonScalableFonts — немасштабируемые шрифты; MonospacedFonts — моноширинные шрифты; ProportionalFonts — пропорциональные шрифты. Метод возвращает кортеж из двух элементов: |