对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 相关文章推荐
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
python实现BackPropagation算法
Dec 14 Python
对Python中range()函数和list的比较
Apr 19 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
Python time库基本使用方法分析
Dec 13 Python
Python实现微信好友的数据分析
Dec 16 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 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
检测png图片是否完整的php代码
2010/09/06 PHP
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
小议Javascript中的this指针
2010/03/18 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
JS实现“全选”和"全不选"功能代码实例
2020/02/06 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python tkinter实现日期选择器
2021/02/22 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
《草原》教学反思
2014/02/15 职场文书
洗手间标语
2014/06/23 职场文书
学习党章的体会
2014/11/07 职场文书
2015选调生工作总结
2015/07/24 职场文书
五年级作文之想象作文
2019/10/30 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis