对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比较两个图片相似度的方法
Mar 13 Python
python实现简单点对点(p2p)聊天
Sep 13 Python
python3中函数参数的四种简单用法
Jul 09 Python
python异步存储数据详解
Mar 19 Python
django自带调试服务器的使用详解
Aug 29 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
TensorFlow打印输出tensor的值
Apr 19 Python
pytorch加载自己的图像数据集实例
Jul 07 Python
python实现调用摄像头并拍照发邮箱
Apr 27 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
python中字符串数组逆序排列方法总结
2019/06/23 Python
Python colormap库的安装和使用详情
2020/10/06 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
主管会计岗位职责
2014/03/13 职场文书
交通安全寄语大全
2014/04/08 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
趣味运动会策划方案
2014/06/02 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
合同范本之电脑出租
2019/08/13 职场文书
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js