import sys from PyQt5 import QtWidgets, QtCore class Widget(QtWidgets.QWidget): def __init__(self, *args, **kwargs): super(Widget, self).__init__(*args, **kwargs) self.filter_edit = QtWidgets.QLineEdit() self.filter_edit.setPlaceholderText("Фильтр по именам") self.filter_edit.setClearButtonEnabled(True) # Добавляем кнопку очистки self.treeview = QtWidgets.QTreeView() # делаем домашнюю папку пользователя - начальной path = QtCore.QDir.homePath() # dirModel self.dirModel = QtWidgets.QFileSystemModel() self.dirModel.setRootPath(path) # QtCore.QDir.AllEntries - отображение всех файлов # QtCore.QDir.NoDotAndDotDot - нет точки и двух точек # QtCore.QDir.Hidden - скрытые файлы self.dirModel.setFilter(QtCore.QDir.AllEntries | QtCore.QDir.NoDotAndDotDot | QtCore.QDir.Hidden) self.treeview.setModel(self.dirModel) self.treeview.setRootIndex(self.dirModel.index(path)) self.treeview.clicked.connect(self.on_clicked_item) # Устанавливаем размеры и расположение виджетов а = QtWidgets.QVBoxLayout(self) а.addWidget(self.filter_edit) а.addWidget(self.treeview) # Подключаем событие изменения текста в QLineEdit к обновлению фильтра self.filter_edit.textChanged.connect(self.update_filter) def update_filter(self): text = self.filter_edit.text() self.dirModel.setNameFilters([text]) # Устанавливаем фильтр по имени def on_clicked_item(self, index): path = self.dirModel.filePath(index) # print(f"Selected: {path}") if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) w = Widget() w.setWindowTitle("Dir Tree View") w.show() sys.exit(app.exec_())