对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闭包实现计数器的方法
May 05 Python
Python读取Excel的方法实例分析
Jul 11 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
Flask框架各种常见装饰器示例
Jul 17 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
python设置环境变量的原因和方法
Jun 24 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
Python docutils文档编译过程方法解析
Jun 23 Python
Python读写yaml文件
Mar 20 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python读取键盘输入的2种方法
2015/06/16 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
python绘制分布折线图的示例
2020/09/24 Python
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
设计部经理的岗位职责
2013/11/16 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
综治维稳工作汇报
2014/10/27 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
Tomcat弱口令复现及利用
2022/05/06 Servers