对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提取图像的名字*.jpg到txt文本的方法
May 10 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
python爬虫获取百度首页内容教学
Dec 23 Python
python 爬取学信网登录页面的例子
Aug 13 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python中seaborn包常用图形使用详解
Nov 25 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
python代码实现猜拳小游戏
Nov 30 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
浅谈Python响应式类库RxPy
Jun 14 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
中东人咖啡哲学
2021/03/03 咖啡文化
十天学会php之第六天
2006/10/09 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
Python  连接字符串(join %)
2008/09/06 Python
Python列表切片用法示例
2017/04/19 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
python用match()函数爬数据方法详解
2019/07/23 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
pandas apply多线程实现代码
2020/08/17 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
实习教师自我鉴定
2013/09/27 职场文书
节水口号标语
2014/06/19 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
婚宴来宾致辞
2015/07/28 职场文书
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL