pyqt中的目录QFileSystemModel 内容用 QTreeView 显示

前两天做代码的时候自己实现了一个目录展示的效果,虽然有较强的扩展性,但是官方可能还是要完善一些。

经过几个小时的摸索,大概效果如下:

import sys, os
from PyQt5.QtWidgets import QApplication, QFileSystemModel, QTreeView, QWidget, QVBoxLayout, QDirModel

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon


class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 file system view - pythonspot.com'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()
    
    def tree_cilcked(self, Qmodelidx):
        print(self.model.filePath(Qmodelidx))
        print(self.model.fileName(Qmodelidx))
        print(self.model.fileInfo(Qmodelidx))
        
    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        # 这里得到目录结构
        self.model = QFileSystemModel()
        self.model.setRootPath(QDir.currentPath())
        # 这里过滤,只显示 py 文件
        mf = self.model.setNameFilters(['*.py'])
        self.model.setNameFilterDisables(False)
        # 这里做展示
        self.tree = QTreeView()
        self.tree.setModel(self.model)
        self.tree.setRootIndex(self.model.index(QDir.currentPath()))
        self.tree.doubleClicked.connect(self.tree_cilcked)
        # 这里隐藏了目录信息展示
        for i in [1,2,3]:
            self.tree.setColumnHidden(i, True)
		# 缩进
        self.tree.setIndentation(10)
        self.tree.setWindowTitle("Dir View")
        self.tree.resize(640, 480)
        windowLayout = QVBoxLayout()
        windowLayout.addWidget(self.tree)
        self.setLayout(windowLayout)
        self.show()

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

效果:
在这里插入图片描述

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QTreeViewPyQt 的一个常用控件,用于显示树形结构的数据。下面是一个简单的示例代码,演示如何在 QTreeView 进行增删改操作: ``` # 导入必要的模块 from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeView, QFileSystemModel, QAbstractItemView from PyQt5.QtCore import QModelIndex # 创建主窗口 app = QApplication([]) window = QMainWindow() # 创建 QTreeView 控件 tree_view = QTreeView(window) tree_view.setEditTriggers(QAbstractItemView.DoubleClicked) # 允许双击编辑 tree_view.setHeaderHidden(True) # 隐藏列头 # 创建 QFileSystemModel 模型 model = QFileSystemModel() model.setRootPath("") # 设置根目录为当前目录 tree_view.setModel(model) # 添加根节点 root_index = model.index(model.rootPath()) model.insertRow(0, root_index) model.setData(root_index.child(0, 0), "Root Node") # 添加子节点 child_index = model.index(0, 0, root_index) model.insertRow(0, child_index) model.setData(child_index.child(0, 0), "Child Node") # 修改节点 model.setData(child_index.child(0, 0), "New Child Node") # 删除节点 model.removeRow(0, child_index) # 显示窗口 window.setCentralWidget(tree_view) window.show() app.exec_() ``` 在这个示例代码,我们首先创建了一个 QTreeView 控件和一个 QFileSystemModel 模型。然后,我们添加了一个根节点和一个子节点,并进行了修改和删除操作。最后,我们将 QTreeView 控件设置为窗口的心控件,并显示窗口。 需要注意的是,QTreeView 控件的编辑触发器默认为双击,因此我们需要调用 `setEditTriggers` 方法将其设置为双击。 另外,QFileSystemModel 模型是一个特殊的模型,用于显示文件系统的目录结构。在这个示例,我们将其用于演示如何在 QTreeView 进行增删改操作。如果您需要使用自定义的模型,可以根据您的需求进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值