PyQt(Python+Qt)学习随笔:树型部件QTreeWidget的itemAbove、itemBelow方法作用探究

PyQt5之TreeWidget树形控件的使用(二) TreeWidget树形控件的使用方法详解 阅读详情

在QTreeWidget的方法中,对于itemBelow、itemAbove方法,官网文档介绍非常简单。

一、itemAbove、itemBelow官网说明介绍及困惑

  • itemAbove方法
    调用方法:QTreeWidgetItem itemAbove(QTreeWidgetItem item)
    返回参数item项之上的项。
  • itemBelow方法
    调用方法:QTreeWidgetItem itemBelow(const QTreeWidgetItem item)
    返回参数item项之下的项。

什么是之上、什么是之下呢?没有详细说明,在网上也没有找到相关资料,老猿猜测是同一层级的前或后。为此老猿进行了验证。

二、验证方法

构建一个包含多层的树型目录,然后逐层输出每个项自身以及该项的itemAbove、itemBelow对应项的信息。对应应用界面截图如下:
在这里插入图片描述

三、验证过程

3.1、通过Designer设计界面

界面只有一个名为treeWidget的对象,有3列:
在这里插入图片描述
并将QTreeWidget部件的鼠标双击信号与界面窗口的doubleClick()槽方法建立连接,如图:
在这里插入图片描述

3.2、调用PyUIC将界面生成一个Python模块文件

生成的模块文件中对应界面类为Ui_mainWin,模块文件名为ui_treeWidget.py。

3.3、在界面派生类中实现方法initTreeItems来构造界面展示的树型目录
 def initTreeItems(self):
		#构造C盘及目录、文件项
        cdriver = QtWidgets.QTreeWidgetItem(["c:\\", "NTFS", "50G"])
        cdir1 = QtWidgets.QTreeWidgetItem(["c:\\temp", "directory", "500M"])
        cdir2 = QtWidgets.QTreeWidgetItem(["c:\\Python", "directory", "1G"])
        cfile11 = QtWidgets.QTreeWidgetItem(["tempfile1.txt", "file", "128K"])
        cfile12 = QtWidgets.QTreeWidgetItem(["tempfile2.txt", "file", "1M"])
        cdir1.insertChildren(1, [cfile11, cfile12])
        self.treeWidget.addTopLevelItem(cdriver)
        cdriver.addChildren([cdir1, cdir2])
        
	    #构造d盘及目录、文件项
        ddriver = QtWidgets.QTreeWidgetItem(["d:\\","NTFS","100G"])
        workdir = QtWidgets.QTreeWidgetItem(["d:\\work", "directory", "1G"])
        tooldir = QtWidgets.QTreeWidgetItem(["d:\\tools","directory","15G"])
        studydir = QtWidgets.QTreeWidgetItem(["d:\\study", "directory", "10G"])
        ue = QtWidgets.QTreeWidgetItem(["ue.exe","执行文件","256K"])
        pycharm = QtWidgets.QTreeWidgetItem(["pycharm.exe", "执行文件", "128M"])
        designer = QtWidgets.QTreeWidgetItem(["designer.exe", "执行文件", "256M"])
        self.treeWidget.addTopLevelItem(ddriver)
        #self.treeWidget.insertTopLevelItem(0,cdriver)
        tooldir.addChildren([ue,pycharm,designer])
        ddriver.addChildren([workdir, tooldir, studydir])
        #ddriver.addChild(workdir)
        #ddriver.addChild(tooldir)
        #ddriver.addChild(studydir)
	    
	    #构造e盘
        edriver = QtWidgets.QTreeWidgetItem(["e:\\", "NTFS", "100G"])
        self.treeWidget.addTopLevelItem(edriver)
        #ddriver.setExpanded(True)

上述代码中除了部分真正的注释外,其他注释的代码是为了做各种测试使用,无需关注。

3.4、实现输出树型目录中项信息的方法showTreeItemInfo
	#针对树型部件中每个顶层项输出项及其上和其下项信息,并对其子项也同样处理
    def showTreeItemInfo(self):
        count = self.treeWidget.topLevelItemCount()  
        for i in range(count):
            item = self.treeWidget.topLevelItem(i)
            self.showItemAboveAndBelowInfo(item,0)

    #针对指定项输出项及其上和其下项信息,并对其子项也同样处理 
    def showItemAboveAndBelowInfo(self,item,spaceCnt):
        aboveItem = self.treeWidget.itemAbove(item)
        belowItem = self.treeWidget.itemBelow(item)
        if aboveItem:
            print(f'{"    "*spaceCnt}item = {item.text(0)},aboveItem = {aboveItem.text(0)} ',end=' ')
        else:
            print(f'{"    "*spaceCnt}item = {item.text(0)},No aboveItem',end=' ')
        if belowItem:
            print(f',belowItem = ', belowItem.text(0))
        else:
            print(",No belowItem")

        childCount = item.childCount()
        if childCount:
            for i in range(childCount):self.showItemAboveAndBelowInfo(item.child(i),spaceCnt+1)
3.5、在界面派生类构造方法中调用initTreeItems构造界面展示的树型目录后调用方法showTreeItemInfo输出每个项的信息
class mainWin(ui_treeWidget.Ui_mainWin,QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.treeWidget.headerItem().setText(0, "文件或目录名")
        self.treeWidget.headerItem().setText(1, "类型")
        self.treeWidget.headerItem().setText(2, "大小")
        self.treeWidget.headerItem().setSizeHint(0,QtCore.QSize(self.treeWidget.width()/2,10))
        self.initTreeItems() #构造显示的树型目录
        self.showTreeItemInfo() #输出树型部件中项的信息
3.6 实现槽方法doubleClick

在doubleClick中调用showTreeItemInfo输出每个项的信息。

3.7、运行界面,查看输出信息

应用运行后,界面信息如下:
在这里插入图片描述
构造方法中输出的项信息如下:

item = c:\,No aboveItem ,belowItem =  d:\
    item = c:\temp,No aboveItem ,belowItem =  c:\
    item = c:\Python,No aboveItem ,belowItem =  c:\
item = d:\,aboveItem = c:\  ,belowItem =  e:\
    item = d:\work,No aboveItem ,belowItem =  c:\
    item = d:\tools,No aboveItem ,belowItem =  c:\
        item = ue.exe,No aboveItem ,belowItem =  c:\
        item = pycharm.exe,No aboveItem ,belowItem =  c:\
        item = designer.exe,No aboveItem ,belowItem =  c:\
    item = d:\study,No aboveItem ,belowItem =  c:\
item = e:\,aboveItem = d:\  ,No belowItem

可以看到顶层项的aboveItem指向顶层上一节点项,如果没有则是None,belowItem指向顶层下一节点项,如果没有则是None。但子项全部没有aboveItem ,belowItem 全部指向顶层第一个节点。老猿为此做了很多测试,包括调整项的构建顺序、插入顺序、一次插入多个子项或逐个插入等,结论都是一样。

3.8、将树型节点中包含子项的节点部分或全部展开,双击鼠标输出项信息
3.8.1、部分子项展开

在这里插入图片描述
输出信息:

item = c:\,No aboveItem ,belowItem =  d:\
    item = c:\temp,No aboveItem ,belowItem =  c:\
    item = c:\Python,No aboveItem ,belowItem =  c:\
item = d:\,aboveItem = c:\  ,belowItem =  d:\work
    item = d:\work,aboveItem = d:\  ,belowItem =  d:\tools
    item = d:\tools,aboveItem = d:\work  ,belowItem =  ue.exe
        item = ue.exe,aboveItem = d:\tools  ,belowItem =  pycharm.exe
        item = pycharm.exe,aboveItem = ue.exe  ,belowItem =  designer.exe
        item = designer.exe,aboveItem = pycharm.exe  ,belowItem =  d:\study
    item = d:\study,aboveItem = designer.exe  ,belowItem =  e:\
item = e:\,aboveItem = d:\study  ,No belowItem

可以看到在界面上可见的项的aboveItem 指向界面上在它之上的第一个项,belowItem 指向界面下面在其下可见的第一个项,未显示的项全部没有aboveItem ,belowItem 全部指向顶层第一个节点。

3.8.2、所有子项展开

以上结论老猿经过多次验证最终得出。我们再看一个所有子项完全展开的例子。
界面:

在这里插入图片描述
输出信息:

item = c:\,No aboveItem ,belowItem =  c:\temp
    item = c:\temp,aboveItem = c:\  ,belowItem =  c:\Python
    item = c:\Python,aboveItem = c:\temp  ,belowItem =  d:\
item = d:\,aboveItem = c:\Python  ,belowItem =  d:\work
    item = d:\work,aboveItem = d:\  ,belowItem =  d:\tools
    item = d:\tools,aboveItem = d:\work  ,belowItem =  ue.exe
        item = ue.exe,aboveItem = d:\tools  ,belowItem =  pycharm.exe
        item = pycharm.exe,aboveItem = ue.exe  ,belowItem =  designer.exe
        item = designer.exe,aboveItem = pycharm.exe  ,belowItem =  d:\study
    item = d:\study,aboveItem = designer.exe  ,belowItem =  e:\
item = e:\,aboveItem = d:\study  ,No belowItem

可以看到与上述结论相同。

四、结论

  • QTreeWidget的itemAbove(QTreeWidgetItem item)方法在参数item对应项在界面上显示时,返回在界面上该项上面第一个项对应的项,如果上面没有项则返回None,如果参数item对应项在界面上未显示、则itemAbove为None。
  • QTreeWidget的itemBelow(QTreeWidgetItem item)方法在参数item对应项在界面上显示时,返回在界面上该项下面第一个项对应的项,如果下面没有项则返回None,如果参数item对应项在界面上未显示、则itemAbove总是返回树型部件的顶部首项。

老猿Python,跟老猿学Python!

QT基础之[QTreeWidgetItem]详解,示例 双击UI文件选择,打开ui设计器,拖拽一个Tree Widget 控件, 阅读详情

相关推荐

【嵌入式——QT】QTreeWidget

嵌入式-QT-QTreeWidget

weixin_39723539的博客 2599

实战PyQt5: 076-树状部件QTreeWidget

QTreeWidget简介 QTreeWidget继承自QTreeView, 它提供与QTreeView列表视图类似的外观布局,它可以方便地添加和删除部件(QTreeWidget可以很方便地为条目设置诸如QPushButton, QLineEdit, QComboBox这样的部件)。QTreeWidget使用QTreeWidgetItem来管理条目。 下面的代码演示了如何快速地构建一个部件视图 treeWidget = QTreeWidget() treeWidget.setColumnCount(

seniorwizard的专栏 5084

PyQt学习笔记:QTreeWidgetItem项标记的相关方法及其Python实现

QTreeWidgetItem可以有多个子项,每个子项都可以设置不同的标记flag,以便对其进行更加灵活的操作。在PyQt中,QTreeWidgetItem的项标记flag是一个32位的整型,可以表示32种不同的状态。本文介绍了QTreeWidgetItem在PyQt中的项标记相关方法,并提供Python代码示例,希望对大家学习PyQt有所帮助。注意,获取项标记时,需要通过按位与(&)操作符将目标标记和当前项标记进行比较,并将结果转换为bool类型。同时设置多个项标记时,可以使用按位或(|)操作符。

DevForge的博客 400

PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中的topLevelItem、indexOfTopLevelItem和takeTopLevelItem方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 获取指定位置顶层项 树型部件QTreeWidget中,通过topLevelItem方法根据位置索引取指定位置的顶层项,调用语法如下: QTreeWidgetItem topLevelItem(int index) 删除指定位置的顶层项 树型部件的takeTopLevelIte...

老猿Python 6722

基于PyQt5实现树形菜单右键删除、修改等功能

QTreeWight 最终效果 实现右键菜单及删除功能 # coding=utf-8 import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * class demo(QWidget): def __init__(self): super().__init__() self.initUI() def initU

CJW的博客 8915

PyQt学习笔记:QTreeWidgetItem的构造方法和树型部件

这个构造方法用于在指定的父节点下创建一个普通的树节点。其中,parent是指定的父级树节点,strings是节点中显示的字符串列表,type是节点的类型,默认为QTreeWidgetItem.Type。其中,parent是指定的父级树型部件,strings是节点中显示的字符串列表,type是节点的类型,默认为QTreeWidgetItem.Type。可以使用removeChild()方法从一个节点中删除子节点,或者使用takeChild()方法将子节点从其父节点中移除并返回。2.1. 添加子节点。

2301_79366177的博客 321

Pyqt5 QTreeWidget使用

在使用pyqt5编写UI时,QTreeWidget对象可以提供预定义模型的树形视图显示。QT文档对QTreeWidget定义如下:The QTreeWidget class is a convenience class that provides a standard tree widget with a classic item-based interface similar to that u...

weixin_42052836的博客 1万+

永久关闭Windows更新的5种方法

很多家用电脑,如果系统自动更新的话,会变得越来越卡顿,且硬件型号兼容也并不完美。那么我们该如何彻底关闭Win11的自动更新呢?以下准备了5种方法,您可以根据自身实际情况选择合适的方法!

qq_43652793的博客 1万+

PyQt6 QTreeView树视图

QTreeView类,它是树控件的基类,使用时,必须为其提供一个模型来与之配合。拖放操作期间打开树中项目之前的延迟时间。是否显示用于展开和折叠顶级项目的控件。项目是否应使用所有列显示键盘焦点。所有项目是否具有相同的高度。所选项目的部分是否突出显示。是否可以通过双击扩展项目。是否可调节最后一列的宽度。项目是否可由用户展开。标题列宽联动调整大小。标题可调节的最小尺寸。

java1234的博客 1991

七、从0开始卷出一个新项目之瑞萨RZN2L 2.2.2 启动模式和flash

七、从0开始卷出一个新项目之瑞萨RZN2L 2.2.2 启动模式和flash。

cl234583745的博客 1466

Win11笔记本BIOS设置避坑大全:Secure Boot、RST、UEFI引导,一次讲清

本文详细解析了Win11笔记本BIOS设置中的关键问题,包括Secure Boot、Intel RST和UEFI引导的配置方法,帮助用户避开双系统安装中的常见陷阱。特别针对不同品牌笔记本的BIOS界面差异,提供了实用的操作指南和优化建议,确保系统兼容性和启动效率。

weixin_29251131的博客 688

PyQt6 QTreeWidget树控件

由于QTreeWidget类继承自QTreeView,因此,它具有QTreeView的所有公共方法,另外,它还提供了一些自身特有的方法。QTreeWidget树控件,它提供了一个使用预定义树模型的树视图,它的每一个树节点都是一个QTreeWidgetItem。

java1234的博客 950

Windows显卡TDR超时导致Unity崩溃?手把手教你修改注册表延长响应时间

本文详细解析了Windows显卡TDR超时导致Unity崩溃的问题,并提供了修改注册表延长响应时间的完整解决方案。通过调整TdrDelay和TdrDdiDelay键值,开发者可以有效避免D3D11设备丢失错误,提升Unity编辑器的稳定性。文章还包含显卡驱动优化、系统性能调优等实用技巧,帮助开发者彻底解决编辑器崩溃问题。

weixin_33737774的博客 622

pyqt目录树QTreeView

正确的方式 self.model = QFileSystemModel() self.model.setRootPath(self.CONFIG[keyPathProjectGlobal]) self.treeSpace = QTreeView() self.treeSpace.setModel(self.model) self.treeSpace.setAnimated(False) ...

3638

在ArcGIS Pro软件中进行滑坡的敏感性和易发性分析

滑坡的敏感性和易发性分析需要综合地形、水文、地质及环境等多维数据,本文罗列了基于ArcGIS Pro软件进行的一系列可执行分析。

weixin_49609713的博客 1732

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 941

[QT_012]Qt学习之QTreeWidget 详解

QTreeWidget

kongcheng253的博客 1万+

RuoYi-Cloud-Plus使用minio进行文件上传图片后无法预览解决_修改minio配置minio桶权限---SpringCloud工作笔记198

在文件管理的位置,发现刚刚上传的图片文件,会显示 预览图片失败 后来经过多方查看,发现是minio的配置的问题。可以看到首先登录RuoYi-Cloud-Plus系统然后,打开文件管理页面可以看到,当上传了图片文件以后。登录以后,选中左侧Buckets,可以看到有自己用的桶,找到以后点击打开。显示文件展示中,文件预览失败,那么这个时候,去修改minio的配置。可以看到,点击配置管理,这里我们启用的是minio对吧。默认是没有配置的这个时候,是允许下载,但不允许预览的.

添柴程序猿的专栏 5567

《转》PyQt4 动态添加treeWidget 的列表项

作者原地址 :http://blog.sina.com.cn/s/blog_4b5039210100h6co.html 参考资料:Qt documentation online(因为这个帮助文档是基于C++做的,里面的语句是C++写的,不过因为PyQt做了很好的移植,方法的名称,参数等等基本都可以在python中套用) QTreeWidget的继承关系如下图:        

yang.zhou欢迎各位 5729

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1326

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

QTreeWidget 和QTreeWidgetItem用法总结

QTreeWidgetItem::addChild(QTreeWidgetItem*)   //用于根节点添加子节点 QTreeWidget::setColumnCount ;                           //用于设置表中的列的列数目,在表头中会有对应的显示, QTreeWidget::setHeaderHidden();

静故了群动 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

PyQt(Python+Qt)学习随笔:枚举类QTreeWidgetItem.ItemType、QListWidgetItem.ItemType的取值及含义

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Model/View的便利类QTreeWidget、QListWidgetItem中的项类型分别是QTreeWidgetItem、QListWidgetItem,在构造这2个类型项的时候,可以指定一个type参数,其类型分别是枚举类型QTreeWidgetItem.ItemType、QList...

老猿Python 1516

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PyQt学习笔记(11)--QTreeWidget

QTreeWidget的继承关系如下图:    因为继承关系是 QAbstractItemView->QTreeView->QTreeWidget  ,所以和QTableWidget很多地方是类似的。    如果需要特定的模式,如显示硬盘信息及内部文件的 dir模式等,都需要用QTreeView,而不是用 QTreeWidget。和 QTableWidget类似,一般步骤是先创建一个

loster_Li的博客 1万+

PyQt(Python+Qt)学习随笔:QTreeWidgetItem项列图标的访问方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget中的QTreeWidgetItem项中可以有多列数据,每列数据都可以设定图标。 可以通过icon(int column)来访问项中指定列的图标,通过setIcon(int column, QIcon icon)来设置项中指定列的图标。 如下面代码将顶层第一项第5列的...

老猿Python 1716

PyQt QTreeWidget 双击条目编辑及出现type object ‘ItemFlags‘has no attribute ‘ItemIsEditable‘ 错误的解决方法详解

本文记录了在利用PyQt(或者Pyside)进行QTreeWidget开过 双击编辑当前条目、替换条目文字功能的过程中,遇到的一些问题和最终解决办法,最后提供了可以借鉴的核心代码,从而实现了这个树形目录的一个常用功能,避免少走弯路。

qq_58168857的博客 1172

PyQt(Python+Qt)学习随笔:QTreeWidgetItem项的子项索引、删除子项的方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget中的QTreeWidgetItem项: 获取子项索引 可通过indexOfChild(QTreeWidgetItem child)方法返回项下子项child的位置索引,索引值从0计数,如果child对应项未在当前项的子项中,则返回-1 removeChi...

老猿Python 3778
上一篇: PyQt(Python+Qt)学习随笔:树型部件的QTreeWidgetItem项中列不同角色数据的有关访问方法
下一篇: PyQt(Python+Qt)学习随笔:树型部件QTreeWidget提供的currentItem当前项操作访问方法
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值