如何在qfilesystemmodel中不进行过滤
以下代码运行(导入必要的库之后):
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('MainWindow')
self.layout = QHBoxLayout()
self.file_system_widget = FileBrowser()
self.layout.addWidget(self.file_system_widget)
widget = QWidget()
widget.setLayout(self.layout)
self.setCentralWidget(widget)
class FileBrowser(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.model = QFileSystemModel()
self.model.setRootPath(self.model.myComputer())
self.model.setNameFilters(['*.*'])
self.model.setNameFilterDisables(1)
self.tree = QTreeView()
self.tree.setModel(self.model)
self.tree.setAnimated(False)
self.tree.setSortingEnabled(True)
layout.addWidget(self.tree)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
try:
os.mkdir('Imports')
except:
pass
main = MainWindow()
main.show()
app.exec()
它在我的C驱动器上给出以下结果:
(此处提供了其中一些文件 https://drive.google.com/drive/forve/folders/folders/1ejyjy0cjy0cjfews6sgs6sgs6sgs2qe_urx2jvlrummkkvlrummkkkvpx)
我的目标是修改行self.model.setnamefilters(['*。*。*'])
,这样,在树视图中,它仅显示> dcm
扩展名的文件以及没有扩展名的文件。也就是说,我绘制的红色部分被删除。
我如何实现这样的目标?为了保留dcm
文件,我可以编写self.model.setnamefilters(['*。dcm'])
之类的行,以保留它们并删除其他。但是我不确定如何在没有扩展的情况下处理文件或如何同时处理这两个要求。
The following code runs (after importing necessary libraries):
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('MainWindow')
self.layout = QHBoxLayout()
self.file_system_widget = FileBrowser()
self.layout.addWidget(self.file_system_widget)
widget = QWidget()
widget.setLayout(self.layout)
self.setCentralWidget(widget)
class FileBrowser(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.model = QFileSystemModel()
self.model.setRootPath(self.model.myComputer())
self.model.setNameFilters(['*.*'])
self.model.setNameFilterDisables(1)
self.tree = QTreeView()
self.tree.setModel(self.model)
self.tree.setAnimated(False)
self.tree.setSortingEnabled(True)
layout.addWidget(self.tree)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
try:
os.mkdir('Imports')
except:
pass
main = MainWindow()
main.show()
app.exec()
It gives the following result on my C drive:
(Some of these files are provided here https://drive.google.com/drive/folders/1ejY0CjfEwS6SGS2qe_uRX2JvlruMKvPX).
My objective is to modify the line self.model.setNameFilters(['*.*'])
such that, in the tree view, it only shows files with dcm
extension and also files without extension. That is, the part I draw red gets removed.
How do I achieve such a goal? For keeping dcm
files, I can write lines like self.model.setNameFilters(['*.dcm'])
to keep them and remove the others. But I am not sure how to deal with files without extension or how to deal with the two requirements at the same time .
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
qfilesystemmodel
类仅支持基本的通配符过滤,因此您需要使用 qsortFilterProxymodel 进行完全可自定义的过滤。这将使您可以使用正则表达式进行过滤,从而实现您所需的大部分内容。但是,重现setNameFilterDisables
的行为将需要重新实现代理模型的flags
方法,并且分类也需要进行一些调整。以下是基于您的示例的简单演示,它实现了所有这些:
The
QFileSystemModel
class only supports basic wildcard filtering, so you will need to use a QSortFilterProxyModel to get fully customisable filtering. This will allow you to use a regular expression to do the filtering, which achieves most of what you want quite simply. However, reproducing the behaviour ofsetNameFilterDisables
will require a reimplemention of theflags
method of the proxy model, and the sorting will also need some adjustment.Below is a simple demo based on your example that implements all of that: