对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程序员
Jun 12 Python
Python中Iterator迭代器的使用杂谈
Jun 20 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python从子线程中获得返回值的方法
Jan 30 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
python 星号(*)的多种用途
Sep 21 Python
python打包生成so文件的实现
Oct 30 Python
python多线程爬取西刺代理的示例代码
Jan 30 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
牡丹941资料
2021/03/01 无线电
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python数据可视化之画图
2019/01/15 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Python简易版图书管理系统
2019/08/12 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
python 元组和列表的区别
2020/12/30 Python
10个顶级Python实用库推荐
2021/03/04 Python
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
供应链金融服务方案
2014/05/25 职场文书
同意离婚答辩状
2015/05/22 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
Ajax实现异步加载数据
2021/11/17 Javascript