На этом шаге мы рассмотрим методы, используемые для создания такого окна.
Помимо рассмотренных методов, класс QFileDialog поддерживает несколько статических методов, реализующих типовые диалоговые окна.
Окно для выбора каталога реализуется с помощью статических методов getExistingDirectory() и getExistingDirectoryUrl(). Форматы методов:
getExistingDirectory([parent=None][, caption=""][, directory=""][, options=ShowDirsOnly]) getExistingDirectoryUrl([parent=None][, caption=""][, directory=QUrl()][, options=ShowDirsOnly])
В параметре parent указывается ссылка на родительское окно или значение None. Необязательный параметр directory задает текущий каталог, а параметр options устанавливает опции (см. описание метода setOption() на предыдущем шаге). Метод getExistingDirectory() возвращает выбранный каталог или пустую строку, а метод getExistingDirectoryUri() - экземпляр класса QUrl с выбранным путем или пустой экземпляр. Пример:
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets, QtCore import sys def on_clicked(): dirName = QtWidgets.QFileDialog.getExistingDirectory(parent=None, directory="C:\\") if dirName != "": lineEdit1.setText(dirName) def on_clicked_url(): dirN = QtWidgets.QFileDialog.getExistingDirectoryUrl(parent=None, directory=QtCore.QUrl.fromLocalFile(QtCore.QDir.currentPath())) dirName = dirN.toLocalFile() if dirName != "": lineEdit2.setText(dirName) app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() # Родительский компонент - окно window.setWindowTitle("Выбор каталога") # Назначаем обработчиками функции button1 = QtWidgets.QPushButton("Строка") lineEdit1 = QtWidgets.QLineEdit() button2 = QtWidgets.QPushButton("Url") lineEdit2 = QtWidgets.QLineEdit() grid = QtWidgets.QGridLayout() # Создаем сетку grid.addWidget(button1, 0, 0) # Добавляем компоненты grid.addWidget(lineEdit1, 0, 1) grid.addWidget(button2, 1, 0) grid.addWidget(lineEdit2, 1, 1) button1.clicked.connect(on_clicked) button2.clicked.connect(on_clicked_url) window.setLayout(grid) window.show() sys.exit(app.exec_())
Результат выполнения этого кода показан на рисунках 1, 2.
Рис.1. Использование метода getExistingDirectory()
Рис.2. Использование метода getExistingDirectoryUrl()
На следующем шаге мы рассмотрим окно для открытия файлов.