一、概述

在Qt Designer的Item Views(Model-based)部件中,Column View部件是一种类似树形视图的视图,不过树形视图的层次结构是纵向排列的,父节点在上,子节点在下,同时兄弟节点也是上下排列,而在Column View中,这种层级关系是通过视图中的列来体现的,兄弟节点是上下排列,但父子节点是横向排列,父节点在左列,子节点在父节点的右边,并通过多列来支持多级父子关系,从展示效果来看,Column View部件的展示数据在视图中是一列一列的展示,每列数据就是一列表视图中的数据。由于横向展示数据对视觉的限制,这种层次结构不能太多,否则体验不好。

Column View对应的类是QColumnView。

二、QColumnView类介绍

2.1、QColumnView类的属性

QColumnView在Designer中可以维护的属性就是一个resizeGripsVisible属性,resizeGripsVisible属性用于控制QColumnView是否显示columnView中各个列表之间调整大小间距的手柄,如果为True就展示,可以调节各个列表之间的间距,为False就不展示,也不能调整各个列表的间距。

下图案例中分为三层,第一层是各洲的列表、第二层是对应洲的国家列表,第三层是对应国家的省。其中黄色标记部分为展示手柄的案例:



下图为不展示手柄的情况:

2.2、QColumnView的Model

QColumnView老猿认为本质上是种树形结构,理论上将树形视图能用的存储Model如QFileSystemModel、QStandardItemModel等QColumnView都可以使用。

三、案例1:使用QFileSystemModel作为columnView的Model

3.1、案例说明

在columnView中展示文件目录非常简单,只需要在视图类的派生类中直接将视图的Model设置为QFileSystemModel即可。

3.2、案例代码

class mainWin(QtWidgets.QWidget,columnWin.Ui_columnViewMainWin):
def __init__(self):
super(mainWin, self).__init__()
self.setupUi(self)
self.model = QtWidgets.QFileSystemModel()
self.model.setRootPath(r"c:\temp")
self.columnView.setModel(self.model)

上述代码中columnWin为对Qt Designer中设计的界面生成的代码对应模块,Ui_columnViewMainWin为界面代码生成对象的类名。

3.3、案例运行界面

四、案例2:使用QStandardItemModel作为columnView的Model

4.1、案例说明

本案例设定的层级数据为:洲–国--省的层级映射数据,数据定义如下:

        continents = ['亚洲','北美洲','欧洲','...']
countries =[['中国','日本','韩国','朝鲜','...'],['美国','加拿大','墨西哥','...'],['英国','法国','德国','...'],['...']]
provinces =[[['北京','上海','广州','武汉','...'],['东京','北海道','九州','...'],['...'],['...'],['...']],
[['...'],['...'],['...'],['...']],
[['...'],['...'],['...'],['...']],
[['...'], ['...'], ['...'], ['...']]
]

其中省略号表示剩余的其余数据。

案例中按上述continents(洲)、countries( 国)、provinces(省)的层级建立Model,并添加对应列表中的数据,添加的项需要使用QStandardItem来构建。

4.2、案例代码

class mainWin(QtWidgets.QWidget,columnWin.Ui_columnViewMainWin):
def __init__(self):
super(mainWin, self).__init__()
self.setupUi(self)
#self.initModel()
self.initDirModel() def initModel(self):
continents = ['亚洲','北美洲','欧洲','...']
countries =[['中国','日本','韩国','朝鲜','...'],['美国','加拿大','墨西哥','...'],['英国','法国','德国','...'],['...']]
provinces =[[['北京','上海','广州','武汉','...'],['东京','北海道','九州','...'],['...'],['...'],['...']],
[['...'],['...'],['...'],['...']],
[['...'],['...'],['...'],['...']],
[['...'], ['...'], ['...'], ['...']]
]
self.model = QtGui.QStandardItemModel()
continentIndex = 0
for continent in continents:
continentModel = QtGui.QStandardItem (continent)
countryIndex = 0
for country in countries[continentIndex]:
countryModel = QtGui.QStandardItem(country)
continentModel.appendRow(countryModel)
for province in provinces[continentIndex][countryIndex]:
provincesModel = QtGui.QStandardItem(province)
countryModel.appendRow(provincesModel)
countryIndex += 1 self.model.appendRow(continentModel)
continentIndex += 1
self.columnView.setModel(self.model)

4.3、案例执行截图

老猿Python,跟老猿学Python!

第15.20节 PyQt(Python+Qt)入门学习:QColumnView的作用及开发中对应Model的使用的更多相关文章

  1. 第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在前面的订阅专栏<第十九章.Model/View开发:QTableView的功能及属 ...

  2. 第15.38节 PyQt(Python+Qt)入门学习:containers容器类部件QDockWidget停靠窗功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QDockWidget类提供了一个可以停靠在QMainWin ...

  3. 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

    老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...

  4. 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...

  5. 第15.28节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTableWidget详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 表格部件为应用程序提供标准的表格显示工具,在表格内可以管理基于行和列的数据项,表格中的最大 ...

  6. 第15.13节 PyQt(Python+Qt)入门学习:Qt Designer的Spacers部件详解

    一. 引言 在Designer的部件栏中,有两种类型的Spacers部件,下图中上面布局中为一个水平间隔部件(按钮1和按钮2之间的部件),下面布局中为一个垂直间隔部件(按钮3和4之间),如图: 这两种 ...

  7. 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  8. 第15.31节 PyQt(Python+Qt)入门学习:containers容器类部件GroupBox分组框简介

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  9. 第15.29节 PyQt(Python+Qt)入门学习:containers容器类部件QScrollArea滚动区域详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 Scroll Area提供了一个呈现在其他部件上的可滚动区域视图,滚动区域用于显示框架内的 ...

随机推荐

  1. lambda表达式的distinct去重

    天真的我最开始以为可以写成list.distinct(x=>x.name);以为这样就可以按照name去重了,结果是不行的.这里记录下正确的用法. 1.这里是针对int集合  可以满足 #reg ...

  2. 利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)

    利用Kotlin扩展函数实现View的点击处理(点击效果和防止快速点击) kotlin经典写法: view?.setOnClickListener { //实现 } 项目实践证明,这种写法存在问题 例 ...

  3. 《<SPRING5高级编程(第5版)>_王净译》笔记-【目录】

    第一次写这玩意,不知道什么时候能写完,今天项目比较近,期望年底能看完吧. 先定个小目标 20201228 完成 第1章 Spring介绍 第2章 入门 第3章 在Spring中引入IoC和DI 第4章 ...

  4. hi-nginx-java并发性能一窥

    欲知hi-nginx-java的并发性能,用jmeter进行测试便知一二. 设定用户数为100000,循环次数为100,ramp-up perio为2: 请求地址为http://localhost/t ...

  5. C#调用pyd

    python打包成pyd在本篇博客不多叙述,请读者自行百度,本篇博客主要讲解在C#中如何调用pyd以及遇到的一些问题如何解决. 1.安装pythonnet pythonnet是一个强大的工具包,用于C ...

  6. App与小程序对接

    背景: 商品详情页,点击分享,分享到微信好友,点开链接App拉起小程序. 用户在小程序浏览完成,跳转至原App购买商品. 功能点: 实现APP与小程序互调. 前提: 已对接好友盟ShareSDK(需要 ...

  7. ceph的ISCSI GATEWAY

    前言 最开始接触这个是在L版本的监控平台里面看到的,有个iscsi网关,但是没看到有类似的介绍,然后通过接口查询到了一些资料,当时由于有比较多的东西需要新内核,新版本的支持,所以并没有配置出来,由于内 ...

  8. Ceph编译加速的小技巧

    总结了几个小技巧,用于在ceph编译过程中,能够更快一点 修改clone的地址 git clone https://github.com/ceph/ceph.git 可以修改成 git clone g ...

  9. 对图片进行Base64转码和解码

    Base64代码 base64.c #include <stdlib.h> #include <stdio.h> #include <string.h> #incl ...

  10. JetCache 源码分析

    一.简介 JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用. JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL.两级缓存.分布 ...