对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 相关文章推荐
windows下wxPython开发环境安装与配置方法
Jun 28 Python
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
Python实现的选择排序算法示例
Nov 29 Python
对python for 文件指定行读写操作详解
Dec 29 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
pycharm全局搜索的具体步骤
Jul 28 Python
Python3如何实现Win10桌面自动切换
Aug 11 Python
超级详细实用的pycharm常用快捷键
May 12 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支持页面回退的两种方法[转]
2007/02/14 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
jquery UI 1.72 之datepicker
2009/12/29 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
搭建vue开发环境
2018/07/19 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
vue中的inject学习教程
2019/04/24 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
python实现文件快照加密保护的方法
2015/06/30 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
python输入中文的实例方法
2020/09/14 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
平安建设工作方案
2014/06/02 职场文书
群众路线调研报告范文
2014/11/03 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
MySQL学习之基础操作总结
2022/03/19 MySQL