对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 yield使用方法示例
Dec 04 Python
推荐11个实用Python库
Jan 23 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
python实现log日志的示例代码
Apr 28 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
在Python dataframe中出生日期转化为年龄的实现方法
Oct 20 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
python 多线程死锁问题的解决方案
Aug 25 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中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
Javascript Objects详解
2014/09/04 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
怎样使用Python脚本日志功能
2016/08/14 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
python 文件转成16进制数组的实例
2018/07/09 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
Django中create和save方法的不同
2019/08/13 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
设计专业自荐信
2014/06/19 职场文书
追讨欠款律师函
2015/06/24 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
Python实现自动玩连连看的脚本分享
2022/04/04 Python