对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 30 Python
python安装Scrapy图文教程
Aug 14 Python
定制FileField中的上传文件名称实例
Aug 23 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
python基础教程项目四之新闻聚合
Apr 02 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
Python 支持向量机分类器的实现
Jan 15 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
Python接口测试文件上传实例解析
May 22 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
Python标准库pathlib操作目录和文件
Nov 20 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 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
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python算法之图的遍历
2017/11/16 Python
解析Python的缩进规则的使用
2019/01/16 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
如何学习Python time模块
2020/06/03 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
迪奥官网:Dior.com
2018/12/04 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
行政总经理岗位职责
2013/12/05 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
行政文员岗位职责
2015/02/04 职场文书
实习班主任自我评价
2015/03/11 职场文书
工作失职检讨书范文
2015/05/05 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
公司安全管理制度范本
2015/08/05 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python