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 相关文章推荐
python实现k均值算法示例(k均值聚类算法)
Mar 16 Python
python中的hashlib和base64加密模块使用实例
Sep 02 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
Python错误处理操作示例
Jul 18 Python
django 实现电子支付功能的示例代码
Jul 25 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
Python request post上传文件常见要点
Nov 20 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 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 获取可变函数参数的函数
2009/08/26 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
VBScript版代码高亮
2006/06/26 Javascript
js压缩利器
2007/02/20 Javascript
xml和web特殊字符
2009/04/28 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
javascript计时器详解
2015/02/28 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
python之Character string(实例讲解)
2017/09/25 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python 列表的清空方式
2020/01/13 Python
python实现的Iou与Giou代码
2020/01/18 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
教师评优事迹材料
2014/01/10 职场文书
个人向公司借款协议书
2014/10/09 职场文书
服务员态度差检讨书
2014/10/28 职场文书
食品安全责任书范本
2015/05/09 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
SQL注入详解及防范方法
2021/12/06 MySQL