第15.20节 PyQt(Python+Qt)入门学习:QColumnView的作用及开发中对应Model的使用
一、概述
在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的使用的更多相关文章
- 第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在前面的订阅专栏<第十九章.Model/View开发:QTableView的功能及属 ...
- 第15.38节 PyQt(Python+Qt)入门学习:containers容器类部件QDockWidget停靠窗功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QDockWidget类提供了一个可以停靠在QMainWin ...
- 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解
老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...
- 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...
- 第15.28节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTableWidget详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 表格部件为应用程序提供标准的表格显示工具,在表格内可以管理基于行和列的数据项,表格中的最大 ...
- 第15.13节 PyQt(Python+Qt)入门学习:Qt Designer的Spacers部件详解
一. 引言 在Designer的部件栏中,有两种类型的Spacers部件,下图中上面布局中为一个水平间隔部件(按钮1和按钮2之间的部件),下面布局中为一个垂直间隔部件(按钮3和4之间),如图: 这两种 ...
- 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...
- 第15.31节 PyQt(Python+Qt)入门学习:containers容器类部件GroupBox分组框简介
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...
- 第15.29节 PyQt(Python+Qt)入门学习:containers容器类部件QScrollArea滚动区域详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 Scroll Area提供了一个呈现在其他部件上的可滚动区域视图,滚动区域用于显示框架内的 ...
随机推荐
- c# ToolStrip控件图片和文字显示--原创
如上图达到这样的效果 首先我们给属性Image和Text分别赋予需要显示的图片和文字 然后设置DisplyStyle属性为ImageAndText,意为同时显示图片和文字 各种设置ImageAlign ...
- Spring Security验证,提示正确的信息
关于Spring Security的使用,之前也整理过一些笔记,但是在提示信息的时候,总感觉还缺点什么?不管是不是前后端分离,我们都希望在登录验证出现错误的时候,能够提示友好的中文信息. 在前后端不分 ...
- [MIT6.006] 16. Dijkstra
先回顾下上节课的内容: 下面来看一个定理:对于所有的点来说,放松操作总是满足 d[v] ≥ δ(s, v).即点s到点v的最短路径总是小于或等于当前点d的路径权重.证明如下: 在正是进入复杂的图前,先 ...
- Java—多线程
一.多线程 原理: 一个cpu内核有"一个指针",由于cpu的频率过高,所以感觉不到卡顿.(伪线程) 二.进程&线程 进程:进程指正在运行的程序.确切的来说,当一个程序进入 ...
- centos7单独编译nbd内核模块
前言 centos7默认内核没有带nbd的模块,可以通过下载跟当前版本匹配的内核源码,编译源码指定的模块,然后加载到系统 步骤 判断版本 [root@lab201 linux-3.10.0-957.e ...
- PLSQL-解析XML
DECLARE v_xmlclob CLOB := '<?xml version="1.0" encoding="UTF-8"?> <head ...
- Java并发编程 - Runnbale、Future、Callable 你不知道的那点事(一)
从事Java开发已经快两年了,都说Java并发编程比较难,比较重要,关键面试必问,但是在我的日常开发过程中,还真的没有过多的用到过并发编程:这不疫情嘛,周末不能瞎逛,就看看师傅们常说的 Runnabl ...
- SpringCloud Alibaba+New搭建企业级开发框架(三):创建New工程
1.创建父工程:File > New > Project...,选择Maven,Create from archetype不要勾选,点击Next进入下一步,填写工程信息. image. ...
- kali 系列学习05 - Nessus 安装及配置
Nessus 安装 1.https://www.tenable.com/products/nessus/select-your-operating-system 点此下载nessus选择适合自己 ...
- 从维基百科等网站复制数据和公式到MathType里编辑
在我们写论文的时候,经常会需要用一些实际案例以及数据,而这些数据和案例有很大一部分可以直接在网络上找到.但是有时候也会发现我们想要的内容和公式,从网页上复制粘贴后太模糊,不适合打印和投影.就需要我们将 ...