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进阶教程之异常处理
Aug 30 Python
python根据出生日期返回年龄的方法
Mar 26 Python
python实现DES加密解密方法实例详解
Jun 30 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
python3爬取各类天气信息
Feb 24 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
Python基于Webhook实现github自动化部署
Nov 28 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函数
2010/02/16 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
python二维键值数组生成转json的例子
2019/12/06 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
采购部经理岗位职责
2014/02/10 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
授权委托书样本
2014/04/03 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
教师学期个人总结
2015/02/11 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
Python进行区间取值案例讲解
2021/08/02 Python