python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例


Posted in Python onMarch 02, 2020

PyQt5树形结构控件QTreeWidget简介

QTreeWidget 类根据预设的模型提供树形显示控件。

QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类。

如果不需要灵活的“模型/视图”框架,可以使用QTreeWidget 来创建有层级关系的树形结构。当把标准 item 模型结合 QTreeView 使用时,可以得到更灵活的使用方法,从而把“数据”和“显示”分离开。

QTreeWidget类中的常用方法

方法 描述
setColumnWidth(int column,int width) 将指定列的宽度设置为给定的值
Column:指定的列
width:指定的宽度
insertTopLevelItems() 在视图的顶层索引中引入项目的列表
expandAll() 展开所有节点的树形节点
invisibleRootItem() 返回树形控件中不可见的根选项(Root Item)
selectionItems() 返回所有选定的非隐藏项目的列表内

QTreeWidgetItem类中常用的方法

方法 描述
addChild() 将子项追加到子列表中
setText() 设置显示的节点文本
Text() 返回显示的节点文本
setCheckState(column.state) 设置指定列的选中状态:
Qt.Checked:节点选中
Qt.Unchecked:节点没有选中
setIcon(column,icon) 在指定的列中显示图标

QTreeWidget树形结构控件的实例

树形结构是通过QTreeWidget和QTreeWidgetItem类实现的,其中QTreeWidgetItem类实现了节点的添加,其完整代码如下

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QBrush, QColor
from PyQt5.QtCore import Qt


class TreeWidgetDemo(QMainWindow):
  def __init__(self, parent=None):
    super(TreeWidgetDemo, self).__init__(parent)
    self.setWindowTitle('TreeWidget 例子')

    self.tree=QTreeWidget()
    #设置列数
    self.tree.setColumnCount(2)
    #设置树形控件头部的标题
    self.tree.setHeaderLabels(['Key','Value'])

    #设置根节点
    root=QTreeWidgetItem(self.tree)
    root.setText(0,'Root')
    root.setIcon(0,QIcon('./images/root.png'))

    # todo 优化2 设置根节点的背景颜色
    brush_red=QBrush(Qt.red)
    root.setBackground(0,brush_red)
    brush_blue=QBrush(Qt.blue)
    root.setBackground(1,brush_blue)

    #设置树形控件的列的宽度
    self.tree.setColumnWidth(0,150)

    #设置子节点1
    child1=QTreeWidgetItem()
    child1.setText(0,'child1')
    child1.setText(1,'ios')
    child1.setIcon(0,QIcon('./images/IOS.png'))

    #todo 优化1 设置节点的状态
    child1.setCheckState(0,Qt.Checked)

    root.addChild(child1)


    #设置子节点2
    child2=QTreeWidgetItem(root)
    child2.setText(0,'child2')
    child2.setText(1,'')
    child2.setIcon(0,QIcon('./images/android.png'))

    #设置子节点3
    child3=QTreeWidgetItem(child2)
    child3.setText(0,'child3')
    child3.setText(1,'android')
    child3.setIcon(0,QIcon('./images/music.png'))



    #加载根节点的所有属性与子控件
    self.tree.addTopLevelItem(root)

    #TODO 优化3 给节点添加响应事件
    self.tree.clicked.connect(self.onClicked)


    #节点全部展开
    self.tree.expandAll()
    self.setCentralWidget(self.tree)

  def onClicked(self,qmodeLindex):
    item=self.tree.currentItem()
    print('Key=%s,value=%s'%(item.text(0),item.text(1)))

if __name__ == '__main__':
  app = QApplication(sys.argv)
  tree = TreeWidgetDemo()
  tree.show()
  sys.exit(app.exec_())

初始运行图如下

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

优化一:设置节点的状态

这里添加了child1的选中状态

 child1.setCheckState(0,Qt.Checked)

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

优化二:设置节点的背景颜色

这里设置了根节点的背景颜色

brush_red=QBrush(Qt.red)

        root.setBackground(0,brush_red)

        brush_blue=QBrush(Qt.blue)

        root.setBackground(1,brush_blue)

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

优化三:给节点添加响应事件

点击,会在控制台输出当前地key值与value值

self.tree.clicked.connect(self.onClicked)

def onClicked(self,qmodeLindex):

        item=self.tree.currentItem()

        print('Key=%s,value=%s'%(item.text(0),item.text(1)))

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

系统定制模式实例

在上面的例子中,QTreeWidgetItem类的节点是一个个添加上去的,这样有时很不方便,特别是窗口产生比较复杂的树形结构时,一般都是通过QTreeView类来实现的,而不是QTreeWidget类,QTreeView和QTreeWidget类最大的区别就是,QTreeView类可以使用操作系统提供的定制模式,比如文件系统盘的树列表

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

if __name__ == '__main__':
  app=QApplication(sys.argv)

  #window系统提供的模式
  model=QDirModel()
  #创建一个QTreeView的控件
  tree=QTreeView()
  #为控件添加模式
  tree.setModel(model)

  tree.setWindowTitle('QTreeView例子')
  tree.resize(640,480)

  tree.show()
  sys.exit(app.exec_())

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

本文主要讲解了PyQt5树形结构控件QTreeWidget详细使用方法与实例,更多关于PyQt5控件使用知识请查看下面的相关链接

Python 相关文章推荐
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
Python冲顶大会 快来答题!
Jan 17 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
Apr 22 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
Python中文编码知识点
Feb 18 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
python3.7通过thrift操作hbase的示例代码
Jan 14 Python
python实现画图工具
Aug 27 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
Python处理mysql特殊字符的问题
Mar 02 #Python
新手入门学习python Numpy基础操作
Mar 02 #Python
python中数据库like模糊查询方式
Mar 02 #Python
python读取文件指定行内容实例讲解
Mar 02 #Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 #Python
python判断两个序列的成员是否一样的实例代码
Mar 01 #Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 #Python
You might like
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
Python对象类型及其运算方法(详解)
2017/07/05 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
python开发游戏的前期准备
2019/05/05 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
怎么快速自学python
2020/06/22 Python
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
文秘专业个人求职信
2013/12/22 职场文书
自考生自我评价分享
2014/01/18 职场文书
村捐赠仪式答谢词
2014/01/21 职场文书
安全生产活动月方案
2014/03/09 职场文书
文明寄语大全
2014/04/11 职场文书
表彰大会策划方案
2014/05/13 职场文书
社会工作专业求职信
2014/07/15 职场文书
授权委托书范文
2014/07/31 职场文书
财务管理专业自荐书
2014/09/02 职场文书
实习生个人总结范文
2015/02/28 职场文书
2015年度物流工作总结
2015/04/30 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
PYTHON InceptionV3模型的复现详解
2022/05/06 Python