То, что я пытаюсь сделать, это Filter / Search QListView, который использует QFileSystemModel, чтобы заполнить его: это часть окна, которое я сейчас использую, используя папку test / dummy, которую я создал
![](https://i.stack.imgur.com/5Djjh.png)
(я работаю над созданием массового файла 'renamer', просто проекта, который я решил изучить по ходу работы)
Я хочу иметь возможность искать / фильтровать представление списка, печатаячто-то в строке 'getOut' edit.Примерно такова моя цель (это из старого случайного видео на YouTube , но оно использует QListWidget
![](https://i.stack.imgur.com/oT5o2.gif)
Я прочитал, что QSortFilterProxyModel, вероятно, то, что яхочу использовать, но когда я устанавливаю представления списка "setRootIndex" с помощью прокси - он выдает ошибку.
TypeError: index(self, int, int, parent: QModelIndex = QModelIndex()): argument 1 has unexpected type 'str'
Так что мои вопросы сводятся к этому:
- Возможно ли даже отфильтровать QListView, как то, что я собираюсь описать выше в gif?
- Можно ли фильтровать / искать QFileSystemModel таким образом?
- Является ли QSortFilterProxyModel подходящим инструментом для работы, если 2 приведенных выше в порядке?
- Должен ли я использовать другую модель или сделать другую (я думаю, что вы можете) более простой и открытой для фильтрации?
Я могу сделать то, что пытаюсь, используя только "setNameFilters" и "setNameFilterDisables (False)" QFileSystemModel, но я должен сделать это таким странным способом, который вы можете увидеть ниже.
def listPopulate(self):
print('\ninside the listPopulate method now')
getOut = self.getOutInputBox.text()
gList = []
gList.insert(0, getOut)
if self.homes:
if os.path.exists(self.homes):
listModel = QtWidgets.QFileSystemModel()
listModel.setFilter(QDir.NoDotAndDotDot | QDir.AllEntries | QDir.Dirs | QDir.Files)
listModel.setRootPath(self.homes)
# proxyModel = QtCore.QSortFilterProxyModel()
# proxyModel.setSourceModel(listModel)
self.mainListView.setModel(listModel)
self.mainListView.setRootIndex(listModel.index(self.homes))
if not getOut:
print('\ngetOut empty')
else:
print(getOut)
listModel.setNameFilters(gList)
listModel.setNameFilterDisables(False)
_All "gList"Это происходит потому, что setNameFilters принимает только список (я предполагаю, что это обычно используется для фильтрации расширений файлов), поэтому я беру фильтр getOut и выбрасываю его в список.и я МОГУ заставить его что-то фильтровать так, как я хочу, но я должен напечатать такие вещи, как " q ", чтобы получить фильтр к вещам с 'Q' в них.А «self.homes» - это просто мой путь / каталог, который выбирает пользователь.