Вы можете просто добавить фильтр следующим образом:
dialog = QFileDialog()
dialog.setNameFilter("Text Spam Files (*spam*.txt)")
dialog.exec()
Но его можно переопределить, если пользователь введет *. * В поле имени файла.
Лучший способ сделать это - реализовать собственную QSortFilterProxyModel
, вот моя попытка:
from PyQt5.QtWidgets import (QApplication, QMainWindow, QFileDialog)
from PyQt5.QtCore import QSortFilterProxyModel, QModelIndex
import sys
class FileFilterProxyModel(QSortFilterProxyModel):
def __init__(self, parent=None):
super(QSortFilterProxyModel, self).__init__(parent)
def filterAcceptsRow(self, source_row: int, source_parent: QModelIndex) -> bool:
source_model = self.sourceModel()
index0 = source_model.index(source_row, 0, source_parent)
if source_model.isDir(index0):
return True
return 'spam' in source_model.fileName(index0).lower()
class Window(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
dialog = QFileDialog()
dialog.setOption(QFileDialog.DontUseNativeDialog)
dialog.setProxyModel(FileFilterProxyModel())
dialog.setNameFilter("Text Files (*.txt)")
dialog.exec()
app = QApplication(sys.argv)
window = Window()
window.show()
app.exec_()