QTreeView+QFileSystemModel显示没有后缀的文件

通过QSortFilterProxyModel的setFilterRegExp方法,设置指定的正则表达式
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
********************************************************************************************
@作者: Aaron.Ma
@文件: view.py
@时间: 2022/8/15 16:12
********************************************************************************************
"""
import sys
import typing

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


class _SortFilterProxyModel(QtCore.QSortFilterProxyModel):

    def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any:
        if orientation == QtCore.Qt.Horizontal:
            if role == QtCore.Qt.TextAlignmentRole:
                return QtCore.Qt.AlignCenter
        return super(_SortFilterProxyModel, self).headerData(section, orientation, role)


class App(QTreeView):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.resize(640, 480)
        self.setWindowTitle("Dir View")
        # 这里得到目录结构
        self.fileSystemModel = QtWidgets.QFileSystemModel()
        self.fileSystemModel.setRootPath(QDir.currentPath())

        # 1、显示所有,包含目录和文件
        self.fileSystemModel.setNameFilters(['*'])

        # 2、二次过滤,只显示出文件
        self.fileSystemModel.setFilter(QDir.Files | QDir.NoDotAndDotDot | QDir.NoSymLinks)
        self.fileSystemModel.setNameFilterDisables(False)

        self.proxyModel = _SortFilterProxyModel()
        # 3、三次过滤,显示没有后缀的文件
        self.proxyModel.setFilterRegExp(QRegExp("^([^.]+)$", Qt.CaseInsensitive))
        self.proxyModel.setSourceModel(self.fileSystemModel)

        # 这里做展示
        self.setModel(self.proxyModel)
        sourceIndex = self.fileSystemModel.index(QDir.currentPath())
        self.setRootIndex(self.proxyModel.mapFromSource(sourceIndex))
        self.doubleClicked.connect(self.tree_cilcked)

        # 名字缩进
        self.setIndentation(10)

    def tree_cilcked(self, index):
        print(self.fileSystemModel.fileName(index))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    ex.show()
    sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaron.Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值