对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中while循环语句用法简单实例
May 07 Python
Python类的用法实例浅析
May 27 Python
Python Requests 基础入门
Apr 07 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
python获取服务器响应cookie的实例
Dec 28 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
Python time库基本使用方法分析
Dec 13 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
Python如何实现线程间通信
Jul 30 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
Python根据字符串调用函数过程解析
Nov 05 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实现WEB动态网页静态
2006/10/09 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
深入理解Node module模块
2018/03/26 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python help函数实例用法
2020/12/06 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
2014保险公司个人工作总结
2014/12/09 职场文书
决心书格式范文
2015/09/23 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
python turtle绘图命令及案例
2021/11/23 Python
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技