对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 相关文章推荐
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python自定义线程类简单示例
Mar 23 Python
python读取各种文件数据方法解析
Dec 29 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
python ETL工具 pyetl
Jun 07 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 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
PHP中实现进程间通讯
2006/10/09 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
PHP中header用法小结
2016/05/23 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
xml转json的js代码
2012/08/28 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
Python下Fabric的简单部署方法
2015/07/14 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
婚庆主持词大全
2015/06/30 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python