Шаг 260.
Библиотека PyQt5.
Диалоговые окна. Класс QFileDialog. Окно для выбора каталога

    На этом шаге мы рассмотрим методы, используемые для создания такого окна.

    Помимо рассмотренных методов, класс 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()

    На следующем шаге мы рассмотрим окно для открытия файлов.




Предыдущий шаг Содержание Следующий шаг