• PyQt(Python+Qt)学习随笔:model/view架构中的两个标准模型QStandardItemModel和QFileSystemModel


    一、PyQt中的标准模型

    PyQt和Qt提供了两个标准模型QStandardItemModel和QFileSystemModel。QStandardItemModel是一个多用途模型,可用于表示列表list、表table和树tree类型视图所需的各种不同数据结构,模型可以保存数据项。QFileSystemModel是一个维护文件目录内容信息的模型,它本身不包含任何数据项,而只是表示本地文件系统上的文件和目录。

    QFileSystemModel 提供了一个随时可用的模型来进行实验,并且可以很容易地配置为使用现有的数据。使用此模型,我们可以演示如何设置用于现成视图的模型,并探索如何使用模型索引(model indexes)操作数据。 QListView 和 QTreeView这两个视图是最适合使用QFileSystemModel的视图。

    二、QFileSystemModel使用案例

    在应用中创建了一个QFileSystemModel实例,并在图形界面中设计创建了 QListView 和 QTreeView两个视图(视图名分别为listView和treeView),然后将视图对应的模型设置为QFileSystemModel实例用于来显示目录的内容。

    1. 图形界面设计

    在这里插入图片描述

    2.在界面派生类中定义模型并将模型和视图关联

    class w_mainWin(ui_fileView.Ui_fileViewMainWin,QtWidgets.QWidget):
        def __init__(self):
            super(w_mainWin, self).__init__()
            self.setupUi(self)
            self.model = QtWidgets.QFileSystemModel(self)
            self.model.setRootPath('c:\') #QtCore.QDir.currentPath())
            self.listView.setModel(self.model)
            self.listView.setRootIndex(self.model.index('c:\')) #QtCore.QDir.currentPath()))
            self.treeView.setModel(self.model)
            self.treeView.setRootIndex(self.model.index('c:\')) #(QtCore.QDir.currentPath()))
    

    代码中先完成界面类初始化工作,然后定义模型,并将模型指向对应目录,并将视图和模型绑定,并设置当前显示目录与模型监控目录一致。

    3. 应用主程序代码

    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        W = w_mainWin()
        W.show()
        sys.exit(app.exec_())
    

    4. 界面运行截图

    在这里插入图片描述

    三、QStandardItemModel使用案例

    1、案例说明

    在应用中展示指定目录的图标文件的文件名和图标,界面就是一个简单的窗口上面放置一名为listView的列表视图,在视图中展示这些文件名和图标。

    2、在界面派生类中定义模型并将模型和视图关联

    class mainWindow( QtWidgets.QWidget,ui_listView.Ui_mainWin):
        def  __init__(self):
            super(mainWindow, self).__init__()
            self.setupUi(self)
           
            self.model = QStandardItemModel()
    
            ICon1 = QStandardItem(QIcon(r"F:学习python资源图像文件add.png"),'add.png')
            ICon2 = QStandardItem(QIcon(r"F:学习python资源图像文件application_windows_add.png"), 'application_windows_add.png')
            ICon3 = QStandardItem(QIcon(r"F:学习python资源图像文件save.png"), 'save.png')
            ICon4 = QStandardItem(QIcon(r"F:学习python资源图像文件search.png"), 'search.png')
            ICon5 = QStandardItem(QIcon(r"F:学习python资源图像文件stop.gif"), 'stop.gif')
    
            self.model.appendRow(ICon1)
            self.model.appendRow(ICon2)
            self.model.appendRow(ICon3)
            self.model.appendRow(ICon4)
            self.model.appendRow(ICon5)
            self.listView.setModel(self.model)
    
    

    3、运行界面截图

    在这里插入图片描述

    老猿Python,跟老猿学Python!

  • 相关阅读:
    ckeditor 实现图片上传以及预览(亲测有效)
    学习OpenStack之 (4): Linux 磁盘、分区、挂载、逻辑卷管理 (Logical Volume Manager)
    学习OpenStack之 (1):安装devstack
    学习OpenStack之 (0):基础知识
    Aho-Corasick 多模式匹配算法、AC自动机详解
    标准C++中的string类的用法总结
    STL队列 之FIFO队列(queue)、优先队列(priority_queue)、双端队列(deque)
    linux下文件合并、分割、去重
    设计模式之观察者模式(Observable与Observer)
    访问者模式讨论篇:java的动态绑定与双分派
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/12235083.html
Copyright © 2020-2023  润新知