对PyQt5中树结构的实现方法详解

作者:husthgzjp 时间:2021-02-07 16:19:20 

树的实质是很多条数据按照一定的内在关系,分层级显示出来。因此每一条数据包括数据项和相互关系。数据项就对应了树中的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的应用。

来源:https://blog.csdn.net/weixin_40910342/article/details/81711695

标签:PyQt5,树结构
0
投稿

猜你喜欢

  • 浅谈python numpy中nonzero()的用法

    2021-09-23 00:06:01
  • 改进SQL Server数据库系统安全五步走

    2009-01-20 11:47:00
  • python连接kafka加载数据的项目实践

    2021-04-23 07:14:38
  • Python3 加密(hashlib和hmac)模块的实现

    2022-07-02 08:13:52
  • 如何基于Python按行合并两个txt

    2021-03-19 08:24:41
  • Python 异常的捕获、异常的传递与主动抛出异常操作示例

    2023-04-16 08:42:49
  • Python深入浅出分析enum枚举类

    2022-07-07 15:09:14
  • 谈谈设计师的发展

    2009-03-17 18:20:00
  • 在cmd命令行里进入和退出Python程序的方法

    2023-07-18 04:21:14
  • ASP面向对象编程探讨及比较

    2008-04-12 07:16:00
  • python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】

    2023-10-07 00:52:22
  • SQLServer WITH 的用法

    2009-07-09 18:54:00
  • 如何用python给数据加上高斯噪声

    2023-06-13 18:18:04
  • 浅谈python的elementtree模块处理中文注意事项

    2021-06-17 12:02:46
  • oracle 动态AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)

    2009-06-19 17:21:00
  • PyQt5使用mimeData实现拖拽事件教程示例解析下

    2021-02-15 11:09:03
  • 适合各种浏览器的js拖动层

    2007-10-22 22:43:00
  • python numpy--数组的组合和分割实例

    2023-02-17 03:58:39
  • 浅谈Javascript中的事件流和事件绑定

    2009-07-20 17:13:00
  • 设计师的底线

    2009-05-06 12:51:00
  • asp之家 网络编程 m.aspxhome.com