第15.27节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTreeWidget详解

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

一、引言

树部件(Tree Widget)是Qt Designer中 Item Widgets(Item-Based)部件中提供的一个Model/View便利部件,对应类为QTreeWidget类。

QTreeWidget类从QTreeView派生(继承关系请参考《PyQt学习随笔:Qt中Model/View相关的主要类及继承关系》),是一个Model/View便利类,提供一个树状管理数据的界面视图,为了快速支持树状视图展示数据,在类内使用了默认内置的树状模型保存数据项,每个数据项的类型都是QTreeWidgetItem对象。

不需要Model/View框架灵活性的开发人员可以很容易地使用QTreeWidget类来创建简单的树状分层列表,但使用QTreeView 与标准项目模型相结合则更灵活,因为QTreeView 与标准项目模型允许将数据的存储与其界面呈现分离。

一个QTreeWidget类对象包括一个界面上显示的部件框架及对应视口(关于视口请参考《PyQt(Python+Qt)学习随笔:QAbstractScrollArea的viewPort(视口)理解》)、头部标题项、数据项等部分组成。

二、树型部件中的QTreeWidgetItem项

树型部件的项是单独的类对象,这个类就是QTreeWidgetItem,树型部件的项用于保存树型部件显示数据的信息行。一个项对应的信息行可以包含几列数据,每列都可以包含一个文本标签和一个图标。

项通常由父项构造,父项可以是QTreeWidget(用于顶级项)对象或QTreeWidgetItem对象(用于树的二层及以下分支项)。
顶级项与树的下层项之间的主要区别在于顶级项没有parent()方法,这个区别可用于区分项之间的差异,并且在从树中插入和移除项时有助于了解项的情况。

默认情况下,项的状态是可用(enabled)、可选择(selectable)、可选中(checkable)的,并且可以作为拖放操作的源。可以通过使用适当的值调用setFlags()来更改每个项的标志(关于项的标记请参考《PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag》)。

2.1、QTreeWidgetItem的构造方法

QTreeWidgetItem的构造方法如下:

  • QTreeWidgetItem(type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(label:Iterable[str], type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidget, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidget, label:Iterable[str], type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidget, preceding:QTreeWidgetItem, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidgetItem, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidgetItem, label:Iterable[str], type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidgetItem, preceding:QTreeWidgetItem, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(other: QTreeWidgetItem )

以上构造方法可以单独构建项,也可以构建项之后将项插入到对应部件的对应位置。相关参数说明如下:

  • type参数用于指定项的类别

其类型为枚举类型QTreeWidgetItem.ItemType,树型部件中的标准QTreeWidgetItem项对应的取值为QTreeWidgetItem.Type(对应整数0),如果开发者需要从QTreeWidgetItem派生自定义项,则需要使用项的Type值大于等于QTreeWidgetItem.UserType(对应整型1000)的值,使用不同的type值的目的是为了提供给开发者对自定义项进行诸如排序等特殊处理。

  • label参数用于指定项的显示文字
    Iterable[str]表示参数类型为迭代类型,其元素必须是str字符串。
  • parent表示项插入到的对应树型部件或上级项节点
  • preceding表示要新建项插入的前一个项,即项插入到parent下的preceding节点后
  • other:表示项从另一个项复制一个项的数据
    注意项的type和对应的树型部件不会从other复制。

2.2、QTreeWidgetItem的其他重要属性或方法

2.2.1、项操作方法
2.2.1.1、项标记flags相关方法

QTreeWidgetItem项可以通过flags()返回项的标记,返回值类型为类型Qt.ItemFlags,也可通过setFlags(Qt.ItemFlags flags)来设置项的标记,通过设置标记可以确认象是否可以进行选中、是否可编辑、是否可拖拽、是否支持复选框进行复选操作、是否可用等。具体项可以设置的属性可以参考《PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag》的介绍。

2.2.1.2、判断项是否disable方法

项的方法isDisabled()用于判断项是否可用,返回True表示项禁用,返回False可用。

注意:项的disable设置方法只能通过setFlags方法进行。

2.2.1.3、判断项是否首列跨所有列展示

项方法isFirstColumnSpanned()用于返回是否显示时项的第一列数据跨越所有列,为True即只显示第一列数据,且占用所有列的位置,为False则显示所有列数据。

可以调用方法setFirstColumnSpanned(bool span)来改变该属性。

2.2.1.4、项隐藏相关方法

项可以隐藏不显示,通过方法isHidden()判断项是否隐藏,通过setHidden(bool hide)方法设置项是否隐藏。

2.2.1.5、项选中相关方法

如果flag设置项允许选择,则项可以被选中,下图顶层第二项为选中状态:
在这里插入图片描述
项是否选中可以通过项方法isSelected()来判断,要设置项的选中状态可以通过项的setSelected(bool select)方法来设置。

2.2.2、子项、父项相关操作方法
2.2.2.1、追加子项方法

项构建以后,可以通过addChild(QTreeWidgetItem child)方法在该项中的子节点最后加入另一个项child作为该项的子项,也可以通过addChildren(iter[QTreeWidgetItem] children)将一个迭代类型children中的多个项加入到该项的子项最后。

如果要插入的项原来已经在QTreeWidgetItem对象中,则该项不会重复加入,如果是多项中有部分项已经在QTreeWidgetItem对象中,则这部分项不会重复加入,其他项则可以加入。

2.2.2.2、插入子项方法

除了追加子项到子项列表最后之外,可以通过insertChild(int index,QTreeWidgetItem child)方法在该项中的子项列表的index位置插入child对应项,该位置及其后位置的项自动后移,也可以通过insertChildren(int index, (iter[QTreeWidgetItem] children)将一个迭代类型children中的多个项从index位置开始顺序插入,原位置的项自动后移。

2.2.2.3、项下子项的指示符展示原则childIndicatorPolicy

树型部件中的项下可以有子项,如果存在子项,则父项的节点是否显示展开或折叠子项的提示符由属性childIndicatorPolicy控制。

childIndicatorPolicy属性的类型为枚举类型QTreeWidgetItem.ChildIndicatorPolicy ,对应取值及含义如下:
在这里插入图片描述

childIndicatorPolicy属性默认值为DontShowIndicatorWhenChildless,可以通过childIndicatorPolicy()和setChildIndicatorPolicy(QTreeWidgetItem.ChildIndicatorPolicy policy)来访问。

2.2.2.4、展开子项

如果一个项有子项,可以调用setExpanded(bool expand)方法来展开或折叠其子项,项的子项是否折叠可以通过isExpanded()方法来判断。

2.2.2.5、获取项的父项或子项

可以通过child(int index) 方法获取项的子项列表中序号为index的项,注意index取值从0开始。子项的个数可以通过childCount()方法获取,index的值必须小于子项的个数,否则返回None。

项的父项可以通过parent() 方法返回,但项如果是顶级项,parent()方法返回None,而不是返回对应的QTreeWidget对象,如果要返回项对应的QTreeWidget对象,可用treeWidget()方法,这个方法对顶级项和非顶级项都是一样的。

2.2.2.6、获取子项索引

可通过indexOfChild(QTreeWidgetItem child)方法返回项下子项child的位置索引,索引值从0计数,如果child对应项未在当前项的子项中,则返回-1。

2.2.2.6、removeChild删除子项

removeChild是根据子项对象从项中删除子项,调用方法为removeChild(QTreeWidgetItem child),操作是从项中删除child对应子项,注意该方法无返回,如果对应子项不存在也不报错。

2.2.2.7、takeChild删除并返回子项

removeChild是根据子项对象从项中删除子项,但无返回,takeChild是根据子项的位置索引来删除子项,同时将删除的子项返回。调用方法为:

QTreeWidgetItem takeChild(int index)

如果执行失败,返回None。

2.2.2.8、takeChildren删除所有子项

takeChildren()是将当前项的所有子项都删除,并将所有子项存储到一个列表中返回,如果当前项没有子项,则返回空列表。

2.2.2.9、sortChildren对子项排序

sortChildren是对项的下层子项按指定列的文本进行排序,调用语法:

sortChildren(int column, Qt.SortOrder order)

Qt.SortOrder为枚举类,有两个常量值,分别为:AscendingOrder升序,对应数值为0,DescendingOrder为降序,对应数值为1。

2.2.2.10、获取项对应的树型部件对象

treeWidget()方法返回项所在树型部件对象,如果项没有插入到树型部件中,则返回None。

2.2.3、项中列相关的操作方法
2.2.3.1、项列数columnCount()方法

项的columnCount方法用于返回项中数据的列数,项数据的列数是在项中实际存储的数据列数,当项构造时传入数据或调用setText(int column,str text)方法增加数据时会改变项的列数。

2.2.3.2、项中列数据的访问方法

树型部件QTreeWidget中的QTreeWidgetItem项中可以有多列数据,每列数据可以根据列位置进行访问。项中列数据的访问方式有两种:

  1. 通过data和setData方法
    可以通过项的data(int column, int role) 方法获取项中指定列指定角色的数据,也可以通过setData(int column, int role, QVariant value)方法设置指定列指定角色的数据为value。
  2. 通过text和setText方法
    可以通过项的text(int column) 方法获取项中指定列的数据,也可以通过setText(int column, str value)方法设置指定的数据为value。
2.2.3.3、项中列图标的访问方法

可以通过icon(int column)来访问项中指定列的图标,通过setIcon(int column, QIcon icon)来设置项中指定列的图标。

如下面代码将顶层第一项第5列的图标设置为指定文件:

self.treeWidget.topLevelItem(0).setIcon(4,QtGui.QIcon(r'F:\小图标\动物\动物-025.gif'))
2.2.3.4、项中列的复选状态访问方法

项中每列数据都可以单独设置复选状态,如图顶层第一项第一列设置了复选状态:
在这里插入图片描述
项中列的复选状态可以通过checkState(int column)来获取,如果要改变项中指定列的复选状态可以调用setCheckState(int column,Qt.CheckState state)来实施。

注意:
2.2.3.5、项中列的其他操作方法

项中的列还可以:

  • 通过textAlignment(int column) 、setTextAlignment(int column,int alignment)来操作文本的对齐方式
  • 通过toolTip(int column)、setToolTip(int column, str toolTip)来操作toolTip
  • 通过statusTip(int column)、setStatusTip(int column, str statusTip)来操作statusTip
  • 通过whatsThis(int column)、setWhatsThis(int column, str whatsThis)来操作whatsThis

三、QTreeWidget的属性

3.1、概述

除了从父类继承的属性外,QTreeWidget在Designer中只有一个属性columnCount属性,另外还有个属性在Designer中没有的属性topLevelItemCount。

3.2、columnCount属性

树型部件中的每个项有一个或多个文字标签或其他装饰符(如图标),这些内容每个显示为一列。QTreeWidget的columnCount属性用于控制和保存树型部件窗口展示的每项列数,其缺省值为1。在将项添加到树型部件之前,必须使用setColumnCount()设置显示的列数。项的列数可以通过columnCount()函数获取。
下图是在Designer中设置columnCount为3时的截图:
在这里插入图片描述
在上面介绍QTreeWidgetItem的columnCount属性时,说明了QTreeWidgetItem和QTreeWidget的columnCount属性之间的关系,在此不再重复。

3.3、topLevelItemCount属性

topLevelItemCount属性是一个只读属性,用于保存树型部件中顶层项的个数,可以通过topLevelItemCount()方法获取属性值,缺省值为0。

当树型部件中顶层项的数目变化时,topLevelItemCount自动跟随变化。

四、QTreeWidget的主要方法

树型部件便利类QTreeWidget的主要方法老猿将其归纳为五大类,分别是构造方法、项操作访问方法、与项位置相关访问方法、顶层项操作和访问方法和部件头访问操作方法。

4.1、构造方法

QTreeWidget的构造方法非常简单:

QTreeWidget(QWidget parent = None)

parent是父对象,一般设置为QTreeWidget对象部署的窗口部件。

4.2、项操作访问方法

在前面第二部分介绍了树型部件中的项QTreeWidgetItem类的属性和方法,除了项对象本身的操作方法外,在树型部件QTreeWidget类中也提供了项(包括顶层项)的操作访问方法。本部分介绍通用的项操作方法。

4.2.1、当前项操作访问方法

当前项是指当前鼠标和键盘焦点所在项,在项可以进行选择操作时,当前项可以是选中状态,也可以是未选中状态,选中项也不一定是当前项。与当前项相关的方法包括:

4.2.2、当前列访问方法

树型部件的currentColumn()方法返回当前项中得到焦点的列索引值,从0开始。如果没有当前列,则返回-1。

4.2.3、获取选中项的方法

在树型部件根据选择模式的设置,只要选择模式不是NoSelection(关于选择模式继承自QAbstractItemView,请参考《PyQt(Python+Qt)学习随笔:QAbstractItemView的selectionMode属性》),则可以通过操作选中部件中的项。选中的项可以通过方法selectedItems()方法返回,其返回值为一个列表,列表中的每个元素是一个选中的QTreeWidgetItem项实例。

4.2.4、搜索项

在树型部件中,可以根据文本、搜索列以及匹配模式来搜索满足条件的项,调用语法:

list[QTreeWidgetItem] findItems( str text, Qt.MatchFlags flags, int column = 0) 

返回值为所有满足条件的项构成的列表,如果没有找到匹配项,返回空列表。
Qt.MatchFlags的取值及含义请参考《PyQt(Python+Qt)学习随笔:Model/View中的枚举类 Qt.MatchFlag的取值及含义》。

4.2.5、项排序

可以对树型部件QTreeWidget中的项按照指定列进行排序,调用语法:

sortItems(int column, Qt.SortOrder order)

Qt.SortOrder为枚举类,有两个常量值,分别为:AscendingOrder升序,对应数值为0,DescendingOrder为降序,对应数值为1。

4.2.6、项编辑

在树型部件QTreeWidget中,有三种方法触发进行项数据的编辑。

4.2.6.1、editTriggers触发编辑

在《PyQt(Python+Qt)学习随笔:QAbstractItemView的editTriggers属性以及平台编辑键(platform edit key )》介绍了QAbstractItemView可以通过设置editTriggers来触发编辑,而QTreeWidget是QAbstractItemView类派生的,继承了该属性,因此通过设置该属性为非NoEditTriggers的值即可触发编辑。

editTriggers可以在Qt Designer中设置,如图:
在这里插入图片描述
也可以调用setEditTriggers(EditTriggers triggers)来触发,关于EditTriggers 枚举类请参考PyQt(Python+Qt)学习随笔:QAbstractItemView的editTriggers属性以及平台编辑键(platform edit key )》。

4.2.6.2、editItem触发编辑

QTreeWidget提供了进行项编辑的方法editItem,调用语法如下:

editItem(QTreeWidgetItem item, int column = 0)
4.2.6.3、openPersistentEditor打开持久编辑器

上面介绍editItem时说明了editItem只能触发一次编辑,可以说进入临时编辑状态,一旦退出编辑除非再通过相关方式触发编辑否则项不可再编辑。与此相对应,QTreeWidget还提供了一种一旦打开编辑状态就可以随时再次编辑,除非显示关闭编辑状态,这种方式就是打开持久编辑器。调用方法如下:

openPersistentEditor(QTreeWidgetItem item, int column = 0)

该方法没有返回值。

4.2.7、项首列跨所有列展示

在前面介绍了QTreeWidgetItem项的isFirstColumnSpanned()方法,该方法用于返回是否显示时项的第一列数据跨越所有列,并可以调用方法setFirstColumnSpanned(bool span)来改变该属性。

在树型部件QTreeWidget中也有类似方法,分别是isFirstItemColumnSpanned和setFirstItemColumnSpanned,调用方法如下:

  • bool isFirstItemColumnSpanned( QTreeWidgetItem item)
  • setFirstItemColumnSpanned( QTreeWidgetItem item, bool span)

这两个方法与项方法isFirstColumnSpanned、setFirstColumnSpanned的作用完全相同,就是方法名和参数有所区别,由于是部件方法,参数中必须指定项,而isFirstColumnSpanned、setFirstColumnSpanned本身是项的实例方法,无需指定项。

4.3、顶层项操作访问方法

在4.1部分介绍了树型部件QTreeWidget方法中与项相关的方法,上述方法适用于所有树型部件的项,除了这些方法之外,树型部件QTreeWidget类还提供了部分与顶层项相关的访问和操作方法。

4.3.1、取指定位置顶层项topLevelItem方法

topLevelItem方法根据位置索引取指定位置的顶层项,调用语法如下:
QTreeWidgetItem topLevelItem(int index)

4.3.2、访问QTreeWidget的隐形根节点

该方法严格来说不属于顶层项的方法,只是只有一个方法且确实能通过它方法顶层项,因此在此还是归并到顶层项的方法中。

我们知道在数据结构上来说,任何树都是有根节点的,但我们在QTreeWidget对象中并没有看到界面上展示一个根节点,在QTreeWidget对象和数据项构建时也没有指定这样的根节点,但实际上这个根节点还是存在的,只是不可见,且该节点是树型部件创建之后就自动创建,无论是否存在顶层项。

QTreeWidget提供了访问该隐形根节点的方法,调用语法如下:

QTreeWidgetItem invisibleRootItem()

这个方法其实用途不大,主要是可以用于递归访问树的所有节点,递归不是从topLevelItem开始,而是从根节点开始,所有节点的类型都是QTreeWidgetItem ,可以用QTreeWidgetItem 的child方法逐层递归访问。

4.3.3、给QTreeWidget增加顶层项的方法

QTreeWidget对象创建后,是没有任何项的,要给部件增加项,首先要增加顶层项。顶层项的增加有三类方法,一类是在前面介绍的QTreeWidgetItem中的构造方法构造项时,直接将QTreeWidget对象作为参数传递进去;第二类是利用上面介绍的隐形根节点,在隐形根节点下面调用QTreeWidgetItem相关方法增加子项即可;第三类就是直接调用QTreeWidget相关方法。

4.3.3.1、追加顶层项的方法

树型部件构建以后,可以通过addTopLevelItem(QTreeWidgetItem item)方法在部件中顶层项的最后加入另一个项item项的顶层项,也可以通过addTopLevelItems(iter[QTreeWidgetItem] items)将一个迭代类型items中的多个项加入到顶层项的最后。

如果要插入的项原来已经在QTreeWidget的项中,则该项不会重复加入,如果是多项中有部分项已经在QTreeWidget的项中,则这部分项不会重复加入,其他项则可以加入。

4.3.3.2、插入顶层项方法

除了追加顶层项到顶层项最后之外,可以通过insertTopLevelItem(int index,QTreeWidgetItem item)方法在部件中顶层项列表的index位置插入item对应项,该位置及其后位置的项自动后移,也可以通过insertTopLevelItems(int index, (iter[QTreeWidgetItem] items)将一个迭代类型items中的多个项从index位置开始顺序插入,原位置的项自动后移。

4.3.4、获取顶层项位置的indexOfTopLevelItem方法

通过调用树型部件的indexOfTopLevelItem方法可以获得对应项在顶层项的位置,调用语法如下:

int indexOfTopLevelItem(QTreeWidgetItem item)
如果对应项未在顶层项中,则返回-1。

4.3.5、删除指定位置的顶层项takeTopLevelItem方法

树型部件的takeTopLevelItem方法可以从树型部件中删除对应项的节点并返回该项,调用语法如下:

QTreeWidgetItem takeTopLevelItem(int index)
如果对应位置无顶层项,则返回None。

4.4、与项位置相关的方法

4.4.1、项的上项和下项

项在树型部件中展示时,其界面上面的项称为上项,其界面下面的项称为下项,上项和下项与项不一定是同一层级的。如下图:
在这里插入图片描述
上图中蓝色选中的项(d:\)是当前项,其上项为黄色标记的项(c:\Python),其下项是蓝色框标记的项(d:\work)。这在Qt文档中是没有说明的,老猿是经过验证确认的,具体验证过程请参考《PyQt(Python+Qt)学习随笔:树型部件QTreeWidget的itemAbove、itemBelow方法作用探究》。

上项和下项的访问方法如下:
  • itemAbove方法
    调用方法:QTreeWidgetItem itemAbove(QTreeWidgetItem item)
    返回参数item项之上的项。
  • itemBelow方法
    调用方法:QTreeWidgetItem itemBelow(const QTreeWidgetItem item)
    返回参数item项之下的项。
注意:当项折叠和展开时,上项和下项会跟随界面的变化而变化。
4.4.2、获取指定位置项的itemAt方法

QTreeWidget的itemAt方法通过视口内的坐标点获取对应坐标位置的项,相关调用方法如下:

  • QTreeWidgetItem itemAt( QPoint p)
  • QTreeWidgetItem itemAt(int x, int y)

通过该方法可以获取到视口上对应坐标所在的项,如果对应坐标位置无项则返回None。

4.4.3、获取可见项视口位置的矩形

树型部件的visualItemRect方法可以返回参数指定项在视口矩形

QRect visualItemRect( QTreeWidgetItem item)
当项在树型部件中不可见时,返回值为一个空矩形(一个没有矩形坐标、长宽属性的QRect()对象)。

4.5、QTreeWidget的标题属性

树型部件窗口可以有一个标题头,其中包含部件中每个列的节(即标题)。QTreeWidget的标题属性包括两部分,一部分是标题项,一部分标题头相关属性。

4.5.1、标题项访问方法

标题头实际上是一个QTreeWidgetItem项,因此标题项相关的属性就是QTreeWidgetItem想的属性,相关属性的访问就通过QTreeWidgetItem的方法去访问。树型部件提供了这个项的访问方法headerItem和setHeaderItem。调用语法如下:

  • QTreeWidgetItem QTreeWidget.headerItem()
  • QTreeWidget.setHeaderItem(QTreeWidgetItem item)

如果需要改变标题,可以通过项的setText方法进行。如:

		self.treeWidget.headerItem().setText(0, "文件或目录名")
        self.treeWidget.headerItem().setText(1, "类型")
        self.treeWidget.headerItem().setText(2, "大小")

4.5.2、改变标题文本的方法

除了用上面的方法根据标题项设置标题文本外,还可以使用setHeaderLabel改变标题首列的标题文本,也可以使用setHeaderLabels改变从首列开始的多个列的标题文本,具体列数看参数传递列表的元素个数。调用语法如下:

  • setHeaderLabel(str label)
  • setHeaderLabels(labels:Iterable[str])

示例代码:

self.treeWidget.setHeaderLabels(("文件或目录名",'类型'))

4.5.3、标题头相关属性访问方法

QTreeWidget标题相关属性可以在Designer中设置,如图:
在这里插入图片描述
这些属性是从QTreeView继承的。关于这些属性的使用,请参考《PyQt(Python+Qt)学习随笔:QTreeView的标题表头header相关属性》。

五、QTreeWidget小结

QTreeWidget树型部件是一种内置存储model的便利类,它可以方便的呈现树型数据。QTreeWidget构造后,自动创建隐形根节点,隐形根节点不可见但可访问,隐形根节点下的子项就是树型部件的顶层项,顶层项创建后可以加入到树型部件中,顶层项可以继续添加子项,子项还可以再添加子项。相关项可以选中、删除和访问,部分操作能触发特定的信号,通过这些信号可以确认操作影响的数据。

广告

老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元,该部分与第十五章的内容基本对应,但同样内容在付费专栏上总体来说更详细、案例更多。本节内容对应付费专栏的《第二十二章、 Model/View便利类树型部件QTreeWidget》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

使用Python PyQt库中的QTreeWidget控件是展示树形数据结构的一个好方法 其中,topLevelItemCount属性可以获取QTreeWidget控件中第一层节点的数量,非常方便。下面我们就来看一下如何使用。首先,需要导入PyQt库中的QTreeWidget和QTreeWidgetItem类,这两个类分别用于创建树形控件和树形控件中的节点。以上就是使用QTreeWidget控件的topLevelItemCount属性获取第一层节点数量的方法。以上代码将输出:Top level item count: 3,说明树形控件中第一层节点的数量为3。 阅读详情

相关推荐

PyQt入门:QTreeWidget在Model/View架构中的使用详解

在实际使用中,我们通常需要根据数据动态创建树形结构。这时,我们可以将QTreeWidget与QStandardItemModel配合使用,QStandardItemModel可以将数据组织成树形结构,并提供了各种方便的方法来操作树形结构数据。QTreeWidget的使用非常简单,首先需要创建一个QTreeWidget对象,然后创建根节点,并添加子节点和子节点的子节点。上述代码创建了一个包含根节点、两个子节点以及一个子节点的子节点的QTreeWidget对象,并将其显示在屏幕上。

2301_78484069的博客 518

PyQt5之树形控件QTreeWidget使用详解 - 创建、增删节点、遍历、美化等常用功能案例解析

本文整理了PyQt(PySide) QTreeWidget 的常用方法与使用技巧,包括类继续关系、常用方法与信号,QtreeWidget树的创建、QTreeWidgetItem条目的编辑,树的各种设置、节点的拖拽、双击编辑、弹出式菜单、样式设置与树中信息的填充等,适合不同层次的开发者参考。

qq_58168857的博客 1万+

PyQt5高级界面控件之QTreeWidget

在上述代码中,我们通过连接QTreeWidget.itemChanged信号来捕获项目更改事件,并在handleItemChanged()方法中处理该事件。在handleItemChanged()方法中,我们首先检查项目的状态是否被修改,并据此输出相应的结果。在上述代码中,我们首先定义了一个QMainWindow类,并在其__init__()方法中创建了一个QTreeWidget对象。我们可以使用QTreeWidget.itemChanged信号来监测项目改变的事件,并在该事件发生时作出相应的处理。

. 1472

PyQt6 QTreeWidget树控件

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

java1234的博客 950

用PyQt构建一个简单的QTreewidget(树形控件)应用程序

然后,我们实例化了我们之前创建的主窗口类,并使用show方法显示它。在主窗口类的构造函数中,我们设置了窗口的标题和大小,并创建了一个QTreeWidget对象作为主窗口的中央部件。在本教程中,我们将学习如何使用PyQt库创建一个简单的QTreewidget(树形控件)应用程序。我们使用QTreeWidgetItem类创建项目,并将它们添加到树形控件中。每个项目都是一个列表,其中第一个元素是项目的名称,后面的元素是每个列的值。运行上述代码,我们将看到一个带有两个顶级项目和子项目的树形控件。

James_CODER的博客 406

使用Python中的PyQt库创建树形视图(QTreeView)是一种常见的UI界面设计需求

然后,我们创建了一个QApplication实例和一个QMainWindow实例,这将作为我们的应用程序和主窗口。然后,我们创建了一个QStandardItemModel实例,它将用于存储树形视图的数据。通过运行上述代码,您将看到一个带有缩进属性的树形视图的窗口。接下来,我们创建了一个根节点(root_item)和两个子节点(child_item1和child_item2),并使用appendRow方法将它们添加到模型中。最后,我们使用setIndentation方法设置了树形视图的缩进距离为20像素。

HackSquad的博客 794

Qt开发入门:从零到跨平台GUI低手

Qt开发入门:从零到跨平台GUI低手

Yusei_0523的博客 551

使用Python PyQt的QTreeWidget树形部件实现当前项操作

在上面的代码中,我们创建了一个自定义的QTreeWidget类,重写了它的构造函数和handle_item_clicked方法。在构造函数中,我们设置树形部件的头标签,添加了一些测试项,并连接了itemClicked信号到handle_item_clicked方法。在PyQt中,QTreeWidget是一种方便的树形部件,通过使用currentItem方法可以获取当前项并进行一些操作。这个简单的例子演示了如何使用QTreeWidget的currentItem方法来捕获用户点击的项,并获取当前的文本内容。

学习使你进步。 483

Python-PYQT QTreeWidget的使用

工具/版本 (1)安装环境:Windows7 64bit (2)使用版本Python3.6 (3)PYQT5 (4)eric6   一,QTreeWidget的基本使用 基本使用可以参考这篇Pyqt5 QTreeWidget使用 二,补充一些点击响应时间 1,使用复选框,点击复选框,获取当前复选框状态 self.tree.itemClicked.connect(self.is...

撒门摩尔的博客 6136

PyQt5高级界面控件之QTreeWidget Python

在PyQt5中,QTreeWidget是一种高级界面控件,它可以用于显示树形结构的数据。它提供了一种方便的方式来组织和展示具有层次结构的数据,例如文件系统、目录结构等。通过使用QTreeWidget和QTreeWidgetItem类,你可以灵活地创建和管理树形结构的数据。你可以根据自己的需求添加和删除节点,设置节点的属性,以及处理节点的选择和交互事件。如果你想了解更多关于PyQt5的信息和功能,请参考PyQt5的官方文档和示例代码。运行上述代码,你将看到一个包含树形结构的QTreeWidget控件的窗口。

CyberLynxO的博客 692

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

PyQt6 QTreeView树视图

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

java1234的博客 1991

STM8库函数开发手册(3) //UART1、内部EEPROM、FLASH操作库、IIC(硬、软)

STM8S 微控制器家族的通用同步异步收发器(UART1,UART2 或者UART3)提供了一种灵活的方法与使用工业标准NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。STM8 的UART 提供范围的波特率选择,并且支持多处理器通讯。UART 也支持LIN(局部互联网)协议版本1.3,2.0,和2.1 以及在主模式下的J2602。 UART1 和UAR...

finedayforu的博客 2520

PyQt5入门(十四)树控件QTreeWidget

马上更

长夜漫漫,无心睡眠 1万+

保姆级教程:2026版Windows电脑换新,微信QQ聊天记录无损搬家(附路径修改避坑指南)

本文提供2026版Windows电脑换新时微信QQ聊天记录无损迁移的保姆级教程,涵盖最新版微信/QQ的存储路径修改和避坑指南。通过详细步骤和实战技巧,确保数据迁移过程中不丢失任何珍贵对话记录和文件,特别适合需要保留完整聊天记录的用户。

weixin_42629815的博客 2480

对族实例进行任意的矩阵变换,需要什么样的族?

问:一个小问题,想向您请教一下。 能不能实现一个这样的操作:创建了一个常规模型的FamilyInstance,然后知道旋转和平移的矩阵,能否根据变换矩阵更新FamilyInstance的位置,绕任意轴旋转任意角度。 请问什么样的实体才能在revit项目文件中任意旋转?貌似一般的实例只能在XY平面内旋转,并且LocationPoint中只有一个Rotation参数。答:您好,因为Revit里面的构件

我爱Revit —— BIM应用及BIM应用软件解决方案专栏 3628

pyqt5 QTreeWidget表头设置

Pyqt5 QTreeWidget 表头透明状态设置问题

weixin_43666531的博客 1029

Comsol单层焊缝焊接数值模拟:温度场与应力场全流程解析

在工程制造领域,有限元模拟是研究焊接热-力行为、优化工艺参数的重要工具。焊接过程涉及强烈的局部加热和快速冷却,材料经历复杂的非线性和相变,必须通过瞬态分析和热-力顺序耦合,才能准确捕捉移动热源作用下的温度演化与应力塑性积累。这一技术广泛应用于压力容器、船舶结构、车辆制造等场景,用以预测残余应力与变形、评估冷裂纹风险,并为工艺设计提供定量支撑。焊接数值模拟能否真正指导实践,关键在于热源校核、随温度变化的材料参数、合理的边界条件与网格策略。单层焊缝作为焊接模拟的基础模型,涵盖了移动热源加载、熔池形成、高温软化与

weixin_30444111的博客 221

【PyQt】树形控件QTreeWidget的复选框实现自动部分选择/半选择状态

实现PyQt中树形控件中的复选按钮的全选、全不选、部分选择,含实现代码。

huanqing2010的专栏 3900

Spring 核心技术解析【纯干货版】- I:Spring 基础模块 Spring-Core 模块精讲

Spring-Core 模块,是 Spring 核心容器模块之一。虽然 “Core” 本身就有 “核心的,重要的部分” 的含义,但是它并非是实现(常被我们说为 Spring 核心机制)IOC / AOP 的模块。Spring 中的 IOC 机制,主要来自于 BeanFactory 容器和 ApplicationContext 容器,这二者分别由同为核心容器模块的 Spring-Bean 模块 和 Spring-Context 模块所提供。

栗筝i的博客 2525

Python航空航天设计神器!从入门到实操,小白也能搞定飞机优化

AeroSandbox的核心价值的是:​降低航空工程优化的门槛,用Python实现高效、简洁的工程设计​。无论是科研、学习还是实际项目,它都能帮你节省大量时间,不用再手动推导导数、编写复杂的优化逻辑。对于新手来说,建议先从案例1(Rosenbrock函数)入手,熟悉优化流程,再尝试案例2(翼型优化),逐步掌握核心用法;对于有航空相关需求的小伙伴,可以深入研究内置的物理模型,结合自己的项目进行定制化开发。最后,互动时间到!👉 你是用AeroSandbox做科研、练手还是实际项目?

源代码杀手的博客 124

实战PyQt5: 075-树状视图QTreeView

QTreeView简介 QTreeView实现对模型(Model)中的条目(ITEM)的树形显示。它是模型-视图(Model-View)类之一,是Qt模型-视图框架的组成部分。它实现了由QAbstractItemView类定义的接口,因此能够显示从QAbstractItemModel类派生出的模型所提供的数据。模型-视图体系结构确保树形视图的内容随着模型的更改而更新。其表头由QHeaderView类来创建。 一个常见的例子就是使用QFileSystemModel提供的数据,显示成树形视图,用于浏览计算机

seniorwizard的专栏 1万+

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1630

Python Qt学习(八)Treeview

【代码】Python Qt(八)Treeview。

1215

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PyQt5学习(11):QTreeWidget树形控件

QTreeWidget控件显示结果如下: 参考:https://blog.csdn.net/jia666666/article/details/81668590 import sys from PyQt5.QtWidgets import QApplication,QMessageBox,QComboBox,QHeaderView,QWidget,QVBoxLayout,QTreeWid...

spider_man 5956

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

GUI编程--PyQt5--QTreeWidget

tree widget;

weixin_45228198的博客 546
上一篇: 第二十二章、 Model/View便利类树型部件QTreeWidget
下一篇: PyQt(Python+Qt)学习随笔:QTableWidget的属性
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、付费专栏及课程。

余额充值