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程序实例(通讯录)
Nov 29 Python
python写的一个squid访问日志分析的小程序
Sep 17 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
python线程、进程和协程详解
Jul 19 Python
详解Django 中是否使用时区的区别
Jun 14 Python
Tesserocr库的正确安装方式
Oct 19 Python
Pycharm更换python解释器的方法
Oct 29 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
python tkinter控件布局项目实例
Nov 04 Python
python数据类型可变不可变知识点总结
Mar 06 Python
如何在mac下配置python虚拟环境
Jul 06 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循环输出数据库内容的代码
2008/05/24 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
Nginx实现反向代理
2017/09/20 Servers
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
ES6生成器用法实例分析
2017/04/10 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
对Python中内置异常层次结构详解
2018/10/18 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
室内设计实习自我鉴定
2013/09/25 职场文书
环境科学专业研究生求职信
2013/10/02 职场文书
财务方面个人工作的自我评价
2013/12/28 职场文书
社区活动邀请函范文
2014/01/29 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
廉洁校园实施方案
2014/05/25 职场文书
化工实习心得体会
2014/09/09 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
研究生个人学年总结
2015/02/14 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL