对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 元类使用说明
Dec 18 Python
win10系统中安装scrapy-1.1
Jul 03 Python
Python中字典(dict)合并的四种方法总结
Aug 10 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
python八大排序算法速度实例对比
Dec 06 Python
简单了解什么是神经网络
Dec 23 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
python pyheatmap包绘制热力图
Nov 09 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
Python中if有多个条件处理方法
Feb 26 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
Django项目创建及管理实现流程详解
Oct 13 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中将汉字转换成拼音的函数代码
2012/09/08 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
node.js中watch机制详解
2014/11/17 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
JavaScript中的this机制
2016/01/30 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python简单计算文件夹大小的方法
2015/07/14 Python
python 解压pkl文件的方法
2018/10/25 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Python调用Windows命令打印文件
2020/02/07 Python
Python爬虫教程知识点总结
2020/10/19 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
安全生产责任书范本
2014/04/15 职场文书
面试通知短信
2015/04/20 职场文书
迎国庆主题班会
2015/08/17 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android
最新最全的手机号验证正则表达式
2022/02/24 Javascript
Nginx利用Logrotate实现日志分割
2022/05/20 Servers
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js