对PyQt5中树结构的实现方法详解


Posted in Python onJune 17, 2019

树的实质是很多条数据按照一定的内在关系,分层级显示出来。因此每一条数据包括数据项和相互关系。数据项就对应了树中的column,而相互关系对应的是应该显示在哪一个条目下。

PyQt5中,树的实现有两种形式,其中较为简单的是使用Tree Widget控件。

对于静态的数据,实现树结构可以直接在Qt中拖入一个Tree Widget控件,然后右键点击它,选择编辑。

对PyQt5中树结构的实现方法详解

对PyQt5中树结构的实现方法详解

其中column是每一条数据有几个数据项,Item体现的是数据和数据之间是什么关系。

对于我们需要从数据库中查出来的数据,我么需要根据实际的数据进行排列,确定一个树的每一级有多少个条目。

其中有一种可行的实现方法是,受限用SQL对查到的数据按照树从上到下的结构排序,然后用如下代码实现:

a = ['1', '11', '12', '13', '2', '21', '22', '23']
# 你的数据按照
# 【root,child1,child11,child12,child13,child2,child21,child22】
# 这种顺序排列
for i in range(len(a)):
  if len(a[i]) == 1 :
    root = QtWidgets.QTreeWidgetItem(self.treeWidget)
    root.setText(0,a[i])
   elif len(a[i]) == 2 :
    child = QtWidgets.QTreeWidgetItem(root)
    child.setText(0,a[i])

用上述代码得到的就是一个仅仅只有显示功能的树。

一般情况下,我们希望我们点击树的某一个条目,能够有相应的操作。

进入到信号和槽的编辑界面,左键点击Tree Widget,拖动到Form的空白处,出现信号和槽的编辑界面。

对PyQt5中树结构的实现方法详解

左边是Tree Widget的信号的列表,右边是我们自定义的槽,可以点击Edit进行增加和删除。

Tree Widget的信号说明可以参考QT的帮助文档。如下是itemClicked信号的说明:

[signal] void QTreeWidget::itemClicked(QTreeWidgetItem *item, int column)

This signal is emitted when the user clicks inside the widget.

The specified item is the item that was clicked. The column is the item's column that was clicked. If no item was clicked, no signal will be emitted.

经过上述编辑之后,ui文件生成的py文件中,实现信号和槽连接的代码如下:

self.treeWidget.itemClicked['QTreeWidgetItem*','int'].connect(Form.tree_item_click)
# 其中tree_item_click是自己定义的槽函数

槽函数的参数与信号的参数要相同,或者更少。

def tree_item_click(self,item,n):
    print(item.text(n))

item为QTreeWidgetItem类。可以参照QT帮助文档中的QTreeWidgetItem类的说明,实现自定义的功能。

总结:本文提供了一种树结构的实现,树的某个条目被点击之后的响应的实现。更多的是提供了一种PyQt相关资料的查询方法。通过对QT帮助文档的查询,可以指导PyQt的应用。

以上这篇对PyQt5中树结构的实现方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的五种异常处理机制介绍
Sep 02 Python
python利用datetime模块计算时间差
Aug 04 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
python版学生管理系统
Jan 10 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
python3爬取各类天气信息
Feb 24 Python
详解用Python练习画个美队盾牌
Mar 23 Python
对python while循环和双重循环的实例详解
Aug 23 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
Python 数据可视化之Matplotlib详解
Nov 02 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 #Python
使用python接入微信聊天机器人
Mar 31 #Python
基于树莓派的语音对话机器人
Jun 17 #Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 #Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 #Python
使用python进行波形及频谱绘制的方法
Jun 17 #Python
PyQt5图形界面播放音乐的实例
Jun 17 #Python
You might like
长波知识介绍
2021/03/01 无线电
两个开源的Php输出Excel文件类
2010/02/08 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php压缩文件夹最新版
2018/07/18 PHP
js实现省市联动效果的简单实例
2014/02/10 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
小程序实现列表倒计时功能
2021/01/29 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
python自动化测试实例解析
2014/09/28 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
python实现人工蜂群算法
2020/09/18 Python
python不同版本的_new_不同点总结
2020/12/09 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
Wallis官网:英国女装零售商
2020/01/21 全球购物
Servlet面试题库
2015/07/18 面试题
建筑专业毕业生推荐信
2013/11/21 职场文书
幼儿教师研修感言
2014/02/12 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
中学生家长评语大全
2014/04/16 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
租房协议书样本
2014/08/20 职场文书
个人合伙协议书范本
2014/10/14 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书