对PyQt5中树结构的实现方法详解
作者:husthgzjp 发布时间:2021-02-07 16:19:20
树的实质是很多条数据按照一定的内在关系,分层级显示出来。因此每一条数据包括数据项和相互关系。数据项就对应了树中的column,而相互关系对应的是应该显示在哪一个条目下。
PyQt5中,树的实现有两种形式,其中较为简单的是使用Tree Widget控件。
对于静态的数据,实现树结构可以直接在Qt中拖入一个Tree Widget控件,然后右键点击它,选择编辑。
其中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的空白处,出现信号和槽的编辑界面。
左边是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的应用。
来源:https://blog.csdn.net/weixin_40910342/article/details/81711695


猜你喜欢
- 前言有时候我们的小程序太大,首次打开小程序的时候回比较慢,这个时候我们可以试试分包操作。分包可以让用户在操作小程序的时候按需下载资源(用户在
- 作用:调用方法改为调用对象, 比如 : p.set_name() 改为 p.set_name区别:前者改变get方法,后者改变set方法效果
- 先给大家介绍php in array函数基本知识热热身。定义和用法in_array() 函数在数组中搜索给定的值。语法in_array(va
- numpy和matlab的几点差异Python numpy和matlab都是便捷灵活的科学计算语言,两者具有很多相似之处,但也有一些混淆的地
- Python如何将一个长图制作成一个视频要将一个长图制作成视频,你可以使用Python中的一些库来完成这个任务。下面是一种基本的方法,使用P
- 这个东西算是我被这个shuffle坑了的一个总结吧!首先我得告诉你一件事,那就是pytorch中的tensor,如果直接使用random.s
- mysql的root账户,我在连接时通常用的是localhost或127.0.0.1,公司的测试服务器上的mysql也是localhost所
- pytest官方文档fixtures调用既然fixtures是给执行测试做准备工作的,那么pytest如何知道哪些测试函数 或者 fixtu
- 证明出错在dataloader里面在pytorch当中,float16和half是一样的数据结构,都是属于half操作,然后dataload
- 原文:Creating a Star Rater using CSS链接:http://komodomedia.com/blog/index
- 设置字段可选在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。 举个例
- 本文实例讲述了Vue.js添加组件操作。分享给大家供大家参考,具体如下:<!DOCTYPE HTML><html>
- 一个XML文档如果符合一些基本的规范,那它就是结构规范的。XML格式有一套比HTML简单的解析规则,允许XML解析器不需要外部描述或了解数据
- Pycharm应该是学python必用的编辑器了,关于它的使用之前已经写过几篇文章,今天再给大家继续介绍两个pycharm的小技巧,希望对大
- 背景:我在爬虫处理某个文本时,用到了re.findall(),而不是re.compile。远在新加坡的同事提出了质疑,认为以我的水平,不应该
- 本节为大家分享的例子是wxpython Frame的用法。例子:#!/usr/bin/python # -*- coding:
- 一,最常见MYSQL最基本的分页方式:select * from content order by id desc limit 0, 10在
- 最近在做一个游戏数据统计后台,最基础的功能是通过分析注册登录日志来展示用户数据。在公司内部测试,用户量很少,所以就没有发现什么性能问题。但是
- 今天在做项目的时候,做了一个弹出层,需要提示,就写了一个 layer.msg('雅蠛蝶 O.o', { &nbs
- DataAccess.csusing System;using System.Collections.Generic;using Syst