zoukankan      html  css  js  c++  java
  • 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!

  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/12235083.html
Copyright © 2011-2022 走看看