树结构控件QTreeWidget 及其项QTreeWidgetltem
QTreeWidget 用来描述树。QTreeWidget 继承自 QTreeView,并且有自己内置的模型,每个项目都由 QtreeWidgetItem 构造。如果想构建更复杂的树,或者使用自定义模型,则需要使用QtreeView。
树结构控件QTreeWidget 继承自QTreeView类它是QTreeView 的便利类。
树结构控件由 1列或多列构成,没有行的概念。
树结构控件有 1个或多个顶层项,顶层项下面有任意多个子项,子项下面还可以有子项,顶层项没有父项。
顶层项和子项都是QTreeWidgetItem,每个QTreeWidgetItem 可以定义在每列显示的文字和图标,一般应在第1列中定义文字或图标,其他列中是否设置文字和图标,需要用户视情况而定。
可以把每个项理解成树结构控件的一行,只不过行之间有层级关系,可以折叠和展开。
用QTreeWidget 类创建树结构控件的方法如下。其中parent是QTreeWidget 树结构控件所在的父窗口或控件
from PySide6.QtWidgets import QTreeWidget
QTreeWidget(parent: Union[PySide6.QtWidgets.QWidget,NoneType]= None)-> None
用QTreeWidgetItem类创建树结构项的方法如下。其中Sequence[str]表示字符串序列,是各列上的文字。
- 第1个参数是QTreeWidget 时表示项追加到树结构控件中,这时新创建的项是顶层项;
- 第1个参数是QTreeWidgetItem表示父项,这时新创建的项作为子项追加到父项下面;
- 第2个参数是QTreeWidgetItem 时表示新创建的项插人到该项
from PySide6.QtWidgets import QTreeWidgetItem
QTreeWidgetItem(Other: PySide6.QtWidgets.QTreeWidgetItem)-> None
QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem,after: PySide6.QtWidgets.QTreeWidgetItem,type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem,strings: Sequence[str],type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem,type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(strings: Sequence[str],type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget,after: PySide6.QtWidgets.QTreeWidgetItem,type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget,strings: Sequence[str],type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget,type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(type: int = < ItemType.Type: 0 >)-> None
树结构控件 QTreeWidget 的常用方法
树结构控件 QTreeWidget 的常用方法如表所示主要方法介绍如下
树结构控件的列的数量由 setColumnCount(columns:int)方法定义,可以为项的每个列定义文字、图标、背景色和前景色、控件和角色值。
树结构控件可以添加顶层项,往项中添加子项需要用项的方法。
- 用addTopLevelItem(QTreeWidgetItem)方法和 addTopLevelItems(Sequence[QTreeWidgetItem])方法添加顶层项;
- 用insertTopLevelItem(index: int,QTreeWidgetItem)方法和 insertTopLevelItems(index; int,Sequence[QTreeWidgetItem])方法可以插人顶层;
- 用takeTopLevelItem(index:int)方法可以移除顶层项,并返回该项;
- 用topLevelItemCount()方法可以获取顶层项的数量;
- 用topLevelItem(index;int)方法可以获取索引值是index 的顶层项。
- 用setCurrentItem(QTreeWidgetItem)方法设置当前项,
- 用setCurrentItem(QTreeWidgetItem,column:int)方法设置当前项和当前列,用currentItem()方法获取当前项。
- 用setHeaderItem(QTreeWidgetItem)方法可以设置表头项,
- 用setHeaderLabel(label:str)方法和 setHeaderLabels(labels;Sequence[str])方法设置表头文字。
- 用collapseItem(QTreeWidgetItem)方法可以折叠指定的项
- 用collapseAlI()方法可以折叠所有的项,
- 用expandItem(QTreeWidgetItem)方法可以展开指定的项
- 用expandAl1()方法可以展开所有的项。
对QListWidget和QTableWidget 的介绍非常详细。本节对QTreeWidget的介绍相对简单一些,只提供一些用来显示数据的基本操作,因为 QTreeWidget 仅仅用来显示数据。
构建一个QtreeWidget实例之后,首先要使用setColumnCount()函数设置树有几列,然后通过columnCount()函获取这个数字。代码如下:
self.treewidget = QTreeWidget()
self.treewidget.setColumnCount(3)
树可以设置标题,既可以使用setHeaderLabels()函数快速设置,也可以使用QTreeWidgetItem()函由构造更复杂的标题,如下所示构谐白定义标照并逐加列
#方式1
self,treeWidget,setHeaderLabels(['学科','姓名','分数'])
# 方式2
item = QTreeWidgetItem()
item.setText(0,'学科')
item.setText(1,'姓名')
item.setText(2,'分数')
item.setIcon(0,QIcon('./images/root .png'))
self.treeWidget.setHeaderItem(item)
创建item 也有另一种快捷方式,效果是一样的:
item = QTreewidgetItem(['学科','姓名','分数'])
item.setIcon(0,QIcon('./images/root.png'))
self.treeWidget.setHeaderItem(item)
初始化树实例,定义了树的列数,并且设置了标题之后,接下来就是创建树的内容
QTreeWidget的方法及参数类型 | 说明 |
---|---|
setColumnCount(columns: int) | 设置列数 |
columnCount() | 获取列数 |
currentColumn() | 获取当前列 |
setColumnWidth(column:int,width:int) | 设置列的宽度 |
setColumnHidden(column:int,hide:bool) | 设置列是否隐藏 |
addTopLevelltem(QTreeWidgetItem) | 添加顶层项 |
addTopLevelItems(Sequence[QTreeWidgetItem]) | 添加多个顶层项 |
insertTopLevelltem(index: int,QTreeWidgetItem) | 插人顶层项 |
insertTopLeveltems(index: int,Sequence[QTreeWidgetltem]) | 插入多个顶层项 |
takeTopLevelltem(index: int) | 移除顶层项,并返回移除的项 |
1opLevelItem(index:int) | 获取索引值是int的顶层项 |
topLevelItemCount() | 获取顶层项的数量 |
setCurrentItem(QTreeWidgetltem) | 把指定的项设置成当前项 |
setCurrentItem(QTreeWidgetItem,column:int) | 设置当前项和当前列 |
currentItem() | 获取当前项 |
editItem(QTreeWidgetItem,column:int=0) | 开始编辑项 |
findItems(str,Qt.MatchFlag,column:int=0) | 搜索项,返回项的列表 |
setHeaderItem(QTreeWidgetItem) | 设置表头 |
setHeaderLabel(label:str) | 设置表头第1列文字 |
setHeaderLabels(labels: Sequence[str]) | 设置表头文字 |
headerItem():0830109293319 | 获取表头项 |
indexOfTopLevelItem(QTreeWidgetltem) | 获取顶层项的索引值 |
invisiblerootItem() | 获取不可见的根项 |
itemAbove(QTreeWidgetltem) | 获取指定项之前的项 |
itemBelow(QTreeWidgetItem) | 获取指定项之后的项 |
itemAr(QPoint) | 获取指定位置的项 |
itemAt(x:int,y:int) | 获取指定位置的项 |
openPersistentEditor(QTreeWidgetItem,column=0) | 打开编辑框 |
isPersistentEditorOpen(QTreeWidgetItem,column=0) | 获取编辑框是否已经打开 |
closePersistentEditor(QTreeWidgetItem,column=0) | 关闭编辑框 |
[slot]scrolToItem(QTreeWidgetItem) | 滚动树结构,使指定的项可见 |
selectedItems() | 获取选中的项列表 |
setFirstItemColumnSpanned(QTreeWidgetItem,bool) | 只显示指定项的第1列的值 |
isFirstItemColumnSpanned(QTreeWidgetItem) | 获取是否只显示第1列的值 |
setItemWidget(QTreeWidgetItem,column: int,QWidget) | 在指定项的指定列设置控件 |
itemWidget(QTreeWidgetItem,column:int) | 获取项上的控件 |
removeItem Widget(QTreeWidgetItem,column:int) | 移除项上的控件 |
[slot]collapseItem(QTreeWidgetItem) | 折叠项 |
collapseA1() | 折叠所有的项 |
[slot]expandItem(QTreeWidgetItem) | 展开项 |
expandAII() | 展开所有的项 |
[slot]clear() | 清空所有项 |
树结构控件QTreeWidget 的信号
树结构控件QTreeWidget 的信号如表所示
QTreeWidget的信号及参数类型 | 说明 |
---|---|
currentItemChanged(currentltem,previousItem) | 当前项发生改变时发送信号 |
itemActivated(item,column) | 项变成活跃项时发送信号 |
itemChanged(item,column) | 项发生改变时发送信号 |
itemClicked(item,column) | 单击项时发送信号 |
itemDoubleClicked(item,column) | 双击项时发送信号 |
itemEntered(item,column) | 光标进人项时发送信号 |
itemPressed(item,column) | 在项上按下鼠标按键时发送信号 |
itemExpanded(item) | 展开项时发送信号 |
itemCollapsed(item) | 折叠项时发送信号 |
itemSelectionChanged() | 选择的项发生改变时发送信号 |
树结构项QTreeWidgetItem
QTreeWidgetItem类提供了一个与QTreeWidget便利类一起使用的项。
from PySide6.QtWidgets import QTreeWidgetItem
QTreeWidgetItem(other: PySide6.QtWidgets.QTreeWidgetItem)-> None
QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem, after: PySide6.QtWidgets.QTreeWidgetItem, type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem, strings: Sequence[str], type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem, type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(strings: Sequence[str], type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget, after: PySide6.QtWidgets.QTreeWidgetItem, type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget, strings: Sequence[str], type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget, type: int = < ItemType.Type: 0 >)-> None
QTreeWidgetItem(type: int = < ItemType.Type: 0 >)-> None
treeview – PySide6.QtWidgets.QTreeWidget
other – PySide6.QtWidgets.QTreeWidgetItem
after – PySide6.QtWidgets.QTreeWidgetItem
type – int
parent – PySide6.QtWidgets.QTreeWidgetItem
strings – list of strings
- 构造指定类型的树小部件项,并将其插入到前面项之后的给定父项中。
- 构造指定类型的树小部件项,并将其附加到给定父级中的项。给定的字符串列表将被设置为项目中每列的项目文本。
- 构造指定类型的树小部件项,并将其附加到给定父级中的项。
- 构造指定类型的树窗口小部件项,该项在前一个子项之后插入到父项中。
- 构造一个树小部件项,并将其附加到给定的父级。给定的字符串列表将被设置为项目中每列的项目文本。
- 构造一个树小部件项,并将其附加到给定的父级。
- 构造指定类型的树小部件项。该项必须插入到树小部件中。给定的字符串列表将被设置为项目中每列的项目文本。
- 构造其他的副本。请注意,type()和treeWidget()不会被复制。当重新实现clone()时,此函数非常有用。
- 构造指定类型的树小部件项。该项必须插入到树小部件中。
树结构项QTreeWidgetItem官方描述
树小部件项用于保存树小部件的信息行。行通常包含几列数据,每列数据可以包含一个文本标签和一个图标。
QTreeWidgetItem类是一个方便类,它取代了Qt 3中的QListViewItem类。它提供了一个与QTreeWidget类一起使用的项。
项通常由一个父项构造,该父项要么是QTreeWidget(用于顶级项),要么是QTree WidgetItem(用于树的较低级别上的项)。例如,以下代码构造了一个顶级项目来表示世界上的城市,并添加了一个奥斯陆条目作为子项目:
cities = QTreeWidgetItem(treeWidget)
cities.setText(0, tr("Cities"))
osloItem = QTreeWidgetItem(cities)
osloItem.setText(0, tr("Oslo"))
osloItem.setText(1, tr("Yes"))
项目可以按特定顺序添加,方法是指定它们在构建时所遵循的项目:
planets = QTreeWidgetItem(treeWidget, cities)
项目中的每一列都可以有自己的背景笔刷,该笔刷是通过setBackground()函数设置的。当前的背景笔刷可以通过background()找到。每一列的文本标签都可以用自己的字体和画笔呈现。这些是用setFont()和setForeground()函数指定的,并用font()和foreground(。
顶级项和树的较低级别中的项之间的主要区别在于,顶级项没有parent()。这些信息可以用来区分项目之间的区别,并且在从树中插入和删除项目时很有用。可以使用takeChild()移除项的子项,并使用insertChild()函数将其插入子项列表中的给定索引处。
默认情况下,项目是启用的、可选择的、可检查的,并且可以是拖放操作的来源。可以通过使用适当的值调用setFlags()来更改每个项目的标志(请参见ItemFlags)。可检查项可以使用setCheckState()函数进行检查和取消检查。相应的checkState()函数指示该项当前是否已被检查。
子类别化
当对QTreeWidgetItem进行子类化以提供自定义项时,可以为它们定义新的类型,以便将它们与标准项区分开来。需要此功能的子类的构造函数需要调用具有等于或大于UserType的新类型值的基类构造函数。
树结构项QTreeWidgetItem方法
- PySide6.QtWidgets.QTreeWidgetItem.ItemType
(继承enum.IntEnum)此枚举描述用于描述树小部件项的类型。您可以在QTreeWidgetItem子类中定义新的用户类型,以确保对自定义项进行特殊处理;例如,当项目被排序时。
Constant | Description |
---|---|
QTreeWidgetItem.Type | 树小部件项的默认类型。 |
QTreeWidgetItem.UserType | 自定义类型的最小值。UserType以下的值由Qt保留。 |
-
PySide6.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy
Constant Description QTreeWidgetItem.ShowIndicator 即使没有子项,也会显示此项目的展开和折叠控件。 QTreeWidgetItem.DontShowIndicator 即使有子对象,也永远不会显示用于展开和折叠的控件。如果节点被强制打开,则用户将无法展开或折叠项目。 QTreeWidgetItem.DontShowIndicatorWhenChildless 如果项目包含子项,则将显示用于展开和折叠的控件。
树结构项QTreeWidgetItem 的常用方法如表所示,主要方法介绍如下
-
用addChild(QIreeWidgetItem)方法或addChildren(Sequence[QTreeWidgetItem])方法可以为项添加子项
- 用insertChild(index;int,QTreeWidgetItem)方法或insertChildren(index:int,Sequence[QTreeWidgetItem])方法可以在项的子项中插人子项,
- 用childCount()方法可以获取子项的数量,
- 用child(index:int)方法可以获取指定索引号的子项。
-
用takeChild(int)方法移除指定索引号的项,并返回该项;
- 用removeChild(QTreeWidgetItem)方法移除指定的子项;
- 用takeChildren()方法移除所有的子项,并返回子项列表。
-
用setText(index:int,str)方法设置项的第int 列的文字,
- 用setIcon(index:int;QIcon)方法设置项的第int列的图标,
- 用setFont(index;int,QFont)方法设置项的第int列的字体,
- 用setBackground(index:int,QColor)方法设置项第int列的背景色,
- 用setForeground(index:int,QColor)方法设置项第int列的前景色
-
用setCheckState(column:int,Qt.CheckState)方法设置项的第 int 列的选状态,其中Qt.CheckState可以取以下值;用checkState(column;int)方法获取项的勾选状态。
- Qt.Unchecked(未勾选)
- QtPartiallyChecked(部分勾选,如果有子项)
- Qt.Checked(勾选)
-
用setExpanded(True)方法展开项
- 用setExpanded(False)方法折叠项
-
用setChildIndicatorPolicy(QTreeWidgetItem,ChildIndicatorPolicy)方法设置展开折叠标识的显示策略,其中QTreeWidgetItem.ChildIndicatorPolicy 可以取:
- QTreeWidgetItem.ShowIndicator(不论有没有子项,都显示标识)
- QTreeWidgetItem.DontShowIndicator(即便有子项,也不显示标识)
- QTreeWidgetItem.DontShowIndicatorWhenChildless(当没有子项时不显示标识)
QTreeWidgetItem 的方法及参数类型 | 说 明 |
---|---|
addChild(child: PySide6.QtWidgets.QTreeWidgetItem)-> None | 将子项追加到子项列表中。 |
addChildren(children: Sequence[PySide6.QtWidgets.QTreeWidgetItem])-> None | 将给定的子项列表附加到该项。 |
background(column: int)-> PySide6.QtGui.QBrush | 返回用于渲染指定列的背景的笔刷。 |
checkState(column: int)-> PySide6.QtCore.Qt.CheckState | 返回给定列中标签的检查状态。 |
child(index: int)-> PySide6.QtWidgets.QTreeWidgetItem | 返回项的子项列表中给定索引处的项。 |
childCount()-> int | 返回子项的数目。 |
childIndicatorPolicy()-> PySide6.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy | 返回项目指示符策略。此策略决定何时显示树枝展开/折叠指示器。 |
clone()-> PySide6.QtWidgets.QTreeWidgetItem | 创建项及其子项的深度副本。 |
columnCount()-> int | 返回项目中的列数。 |
data(column: int, role: int)-> Any | 返回项的列和角色的值。 |
emitDataChanged()-> None | 使与此项关联的模型为此项发出dataChanged()信号。 通常,只有在已经子类化了QTreeWidgetItem并重新实现了data()和/或setData()的情况下,才需要调用此函数。 |
flags()-> PySide6.QtCore.Qt.ItemFlag | 返回用于描述项目的标志。这些决定了是否可以检查、编辑和选择项目。标志的默认值为`ItemIsSelectable |
font(column: int)-> PySide6.QtGui.QFont | 返回用于呈现指定列中的文本的字体。 |
foreground(column: int)-> PySide6.QtGui.QBrush | 返回用于渲染指定列的前景(例如文本)的画笔。设置默认构造的笔刷将使视图使用样式中的默认颜色。 |
icon(column: int)-> PySide6.QtGui.QIcon | 返回显示在指定列中的图标。 |
indexOfChild(child: PySide6.QtWidgets.QTreeWidgetItem)-> int | 返回项的子项列表中给定子项的索引。 |
insertChild(index: int, child: PySide6.QtWidgets.QTreeWidgetItem)-> None | 在子项列表的索引处插入子项。 如果子项已经插入到其他位置,则不会再次插入。 |
insertChildren(index: int, children: Sequence[PySide6.QtWidgets.QTreeWidgetItem])-> None | 将给定的子项列表插入索引处的项子项列表中。 已经插入其他位置的子项将不会被插入。 |
isDisabled()-> bool | 如果项目被禁用,则返回true;否则返回false。 |
isExpanded()-> bool | 如果项已展开,则返回true,否则返回false。 |
isFirstColumnSpanned()-> bool | 如果项跨越一行中的所有列,则返回true;否则返回false。 |
isHidden()-> bool | 如果项是隐藏的,则返回true,否则返回false。 |
isSelected()-> bool | 如果选择了项,则返回true,否则返回false。 |
__lt__(other:PySide6.QtWidgets.QTreeWidgetItem)->bool | 如果项中的文本小于另一项中的文字,则返回true,否则返回false。 |
parent()-> PySide6.QtWidgets.QTreeWidgetItem | 返回项目的父级。 |
read(in_: PySide6.QtCore.QDataStream)-> None | 从中的流中读取项目。这只会将数据读取到单个项目中。 |
removeChild(child: PySide6.QtWidgets.QTreeWidgetItem)-> None | 删除由子项指示的给定项。删除的项目将不会被删除。 |
setBackground(column: int, brush: Union[PySide6.QtGui.QBrush, PySide6.QtCore.Qt.BrushStyle, PySide6.QtCore.Qt.GlobalColor, PySide6.QtGui.QColor, PySide6.QtGui.QGradient, PySide6.QtGui.QImage, PySide6.QtGui.QPixmap])-> None | 将给定列中标签的背景笔刷设置为指定的笔刷。设置默认构造的笔刷将使视图使用样式中的默认颜色。 |
setCheckState(column: int, state: PySide6.QtCore.Qt.CheckState)-> None | 将处于给定列检查状态的项设置为state。 |
setChildIndicatorPolicy(policy: PySide6.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy)-> None | 设置项目指标策略。此策略决定何时显示树枝展开/折叠指示器。默认值为DontShowIndicator WhenChildless。 |
setData(column: int, role: int, value: Any)-> None | 将项的列和角色的值设置为给定值。 角色描述由值指定的数据类型,并由ItemDataRole枚举定义。 |
setDisabled(disabled: bool)-> None | 如果禁用为true,则禁用该项目;否则将启用该项目。 |
setExpanded(expand: bool)-> None | 如果expand为true,则展开项目,否则折叠项目。 |
setFirstColumnSpanned(span: bool)-> None | 如果span为true,则将第一节设置为跨所有列;否则将显示所有项目部分。 |
setFlags(flags: PySide6.QtCore.Qt.ItemFlag)-> None | 将项目的标志设置为给定的标志。这些决定了项目是否可以被选择或修改。这通常用于禁用项目。 |
setFont(column: int, font: Union[PySide6.QtGui.QFont, str, Sequence[str]])-> None | 将用于显示给定列中文本的字体设置为给定字体。 |
setForeground(column: int, brush: Union[PySide6.QtGui.QBrush, PySide6.QtCore.Qt.BrushStyle, PySide6.QtCore.Qt.GlobalColor, PySide6.QtGui.QColor, PySide6.QtGui.QGradient, PySide6.QtGui.QImage, PySide6.QtGui.QPixmap])-> None | 将给定列中标签的前景笔刷设置为指定的笔刷。 |
setHidden(hide: bool)-> None | 如果隐藏为true,则隐藏项目,否则显示项目。如果项目当前不在视图中,则对此函数的调用无效。特别是,对一个项调用setHidden(true),然后将其添加到视图中,会得到一个可见的项。 |
setIcon(column: int, icon: Union[PySide6.QtGui.QIcon, PySide6.QtGui.QPixmap])-> None | 将要在给定列中显示的图标设置为图标。 |
setSelected(select: bool)-> None | 设置要选择的项目的选定状态。 |
setSizeHint(column: int, size: PySide6.QtCore.QSize)-> None | 将给定列中树项的大小提示设置为大小。如果未设置大小提示或大小无效,则项目委托将根据项目数据计算大小提示。 |
setStatusTip(column: int, statusTip: str)-> None | 将给定列的状态提示设置为给定的状态提示。需要启用QTreeWidget鼠标跟踪才能使此功能正常工作。 |
setText(column: int, text: str)-> None | 将要在给定列中显示的文本设置为给定文本。 |
setTextAlignment(column: int, alignment: PySide6.QtCore.Qt.AlignmentFlag)-> None setTextAlignment(column: int, alignment: int)-> None | 使用采用Alignment参数的重载。将给定列中标签的文本对齐方式设置为指定的对齐方式。 将给定列中标签的文本对齐方式设置为指定的对齐方式。 |
setToolTip(column: int, toolTip: str)-> None | 将给定列的工具提示设置为tooltip。 |
setWhatsThis(column: int, whatsThis: str)-> None | 将给定列的"What’s This?"帮助设置为whatsThis。 |
sizeHint(column: int)-> PySide6.QtCore.QSize | 返回给定列中树项的大小提示集(请参见QSize)。 |
sortChildren(column: int, order: PySide6.QtCore.Qt.SortOrder)-> None | 根据给定列中的值,使用给定的顺序对项的子项进行排序。 |
statusTip(column: int)-> str | 返回给定列内容的状态提示。 |
takeChild(index: int)-> PySide6.QtWidgets.QTreeWidgetItem | 删除索引处的项并返回该项,否则返回0。 |
takeChildren()-> List[PySide6.QtWidgets.QTreeWidgetItem] | 删除子项列表并返回,否则返回一个空列表。 |
text(column: int)-> str | 返回指定列中的文本。 |
textAlignment(column: int)-> int | 返回给定列中标签的文本对齐方式。 |
toolTip(column: int)-> str | 返回给定列的工具提示。 |
treeWidget()-> PySide6.QtWidgets.QTreeWidget | 返回包含该项的树小部件。 |
type()-> int | 返回传递给QTreeWidgetItem构造函数的类型。 |
whatsThis(column: int)-> str | 返回给定列内容的"这是什么?"帮助。 |
write(out: PySide6.QtCore.QDataStream)-> None | 写入要流式输出的项。这只会从一个项目中写入数据。 |
树结构控件QTreeWidget 的应用实例
# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/26 21:24
# File_name: 06-树结构控件QTreeWidget的应用实例.py
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
import sys
import random
import os
os.chdir(os.path.dirname(__file__))
class QTreeWidgetDemo(QMainWindow):
def __init__(self,parent=None):
super(QTreeWidgetDemo,self).__init__(parent)
self.setWindowTitle("QTreeWidget案例")
self.resize(500,600)
self.text = QPlainTextEdit('用来显示QTreeWidget相关信息:')
self.treeWidget = QTreeWidget()
layout = QVBoxLayout(self)
layout.addWidget(self.treeWidget)
layout.addWidget(self.text)
widget = QWidget()
self.setCentralWidget(widget)
widget.setLayout(layout)
self.initItem()
# selection
# self.listWidget.setSelectionMode(QAbstractItemView.SingleSelection)
self.treeWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
# self.treeWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
self.treeWidget.setSelectionBehavior(QAbstractItemView.SelectItems)
self.treeWidget.setMouseTracking(True)
# 信号与槽
self.treeWidget.currentItemChanged[QTreeWidgetItem,QTreeWidgetItem].connect(self.onCurrentItemChanged)
self.treeWidget.itemActivated[QTreeWidgetItem,int].connect(self.onItemActivated)
self.treeWidget.itemClicked[QTreeWidgetItem,int].connect(self.onItemClicked)
self.treeWidget.itemDoubleClicked[QTreeWidgetItem,int].connect(lambda item,column: self.text.appendPlainText(f'"{item.text(column)}"触发itemDoubleClicked信号:'))
self.treeWidget.itemChanged[QTreeWidgetItem,int].connect(lambda item,column: self.text.appendPlainText(f'"{item.text(column)}"触发itemChanged信号:'))
self.treeWidget.itemEntered[QTreeWidgetItem,int].connect(lambda item,column: self.text.appendPlainText(f'"{item.text(column)}"触发itemEntered信号:'))
self.treeWidget.itemPressed[QTreeWidgetItem,int].connect(lambda item,column: self.text.appendPlainText(f'"{item.text(column)}"触发itemPressed信号:'))
self.treeWidget.itemSelectionChanged.connect(lambda: self.text.appendPlainText(f'触发itemSelectionChanged信号:'))
self.treeWidget.clicked.connect(self.onClicked)
def initItem(self):
# 设置列数
self.treeWidget.setColumnCount(3)
# 设置树形控件头部的标题
self.treeWidget.setHeaderLabels(['学科','姓名','分数'])
# 设置根节点
root = QTreeWidgetItem(self.treeWidget)
root.setText(0,'学科')
root.setText(1,'姓名')
root.setText(2,'分数')
root.setIcon(0,QIcon('./images/root.png'))
# 设置根节点的背景颜色
root.setBackground(0,QBrush(Qt.blue))
root.setBackground(1,QBrush(Qt.yellow))
root.setBackground(2,QBrush(Qt.red))
# 设置树形控件的列的宽度
self.treeWidget.setColumnWidth(0,150)
# 设置子节点1
for subject in ['语文','数学','外语','综合']:
child1 = QTreeWidgetItem([subject,'',''])
root.addChild(child1)
# 设置子节点2
for name in ['张三','李四','王五','赵六']:
child2 = QTreeWidgetItem()
child2.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
child2.setText(1,name)
score = random.random()* 40 + 60
child2.setText(2,str(score)[:5])
if score >= 90:
child2.setBackground(2,QBrush(Qt.red))
elif 80 <= score < 90:
child2.setBackground(2,QBrush(Qt.darkYellow))
child1.addChild(child2)
# 加载根节点的所有属性与子控件
self.treeWidget.addTopLevelItem(root)
# 节点全部展开
self.treeWidget.expandAll()
# 启用排序
self.treeWidget.setSortingEnabled(True)
def onClicked(self,index):
item = self.treeWidget.currentItem()
self.text.appendPlainText(f'触发clicked信号,点击了:"{item.text(index.column())}"')
def onCurrentItemChanged(self,current: QTreeWidgetItem,previous: QTreeWidgetItem):
if previous == None:
_str = f'触发currentItemChanged信号,当前项:"{current.text(0)}-{current.text(1)}-{current.text(2)}",之前项:None'
else:
_str = f'触发currentItemChanged信号,当前项:"{current.text(0)}-{current.text(1)}-{current.text(2)}",之前项:"{previous.text(0)}-{previous.text(1)}-{previous.text(2)}"'
self.text.appendPlainText(_str)
def onItemClicked(self,item: QTreeWidgetItem,column: int):
self.text.appendPlainText(f'"{item.text(column)}"触发itemClicked信号:')
return
def onItemActivated(self,item: QTreeWidgetItem,column: int):
self.text.appendPlainText(f'"{item.text(column)}"触发itemActivated信号:')
return
if __name__ =="__main__":
app = QApplication(sys.argv)
demo = QTreeWidgetDemo()
demo.show()
sys.exit(app.exec())
下面的程序建立一个树结构控件,单击树结构控件的子项,可以把子项上的内容输出程序运行界面如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZZ2cCYA-1686496991661)(C:\Users\Hi\AppData\Roaming\Typora\typora-user-images\image-20230304234931384.png)]
# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/4 21:42
# File_name: 03-树结构控件QTreeWidget的应用实例.py
from PySide6.QtWidgets import QApplication,QWidget,QSplitter,QTextBrowser,QHBoxLayout,QTreeWidget,QTreeWidgetItem
from PySide6.QtCore import Qt
import sys
class MyWindow(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.resize(900,600)
self.widget_setupUi()
self.treeWidget_setUp()
def widget_setupUi(self): # 建立主程序界面
h = QHBoxLayout(self)
splitter = QSplitter(Qt.Horizontal,self)
h.addWidget(splitter)
self.treeWidget = QTreeWidget()
self.textBrowser = QTextBrowser()
splitter.addWidget(self.treeWidget)
splitter.addWidget(self.textBrowser)
def treeWidget_setUp(self): # 建立树结构控件
self.treeWidget.setColumnCount(2)# 设置列数
header = QTreeWidgetItem()# 表头项
header.setText(0,"噪声源")
header.setText(1,"噪声值")
header.setTextAlignment(0,Qt.AlignCenter)
header.setTextAlignment(1,Qt.AlignCenter)
self.treeWidget.setHeaderItem(header)
self.topItem_1 = QTreeWidgetItem(self.treeWidget)# 顶层项
self.topItem_1.setText(0,"高铁")
child_1 = QTreeWidgetItem(self.topItem_1,["结构噪声","70"])
child_2 = QTreeWidgetItem(self.topItem_1,["电机噪","60"])
child_3 = QTreeWidgetItem(self.topItem_1,["空调噪声","44"])
child_4 = QTreeWidgetItem(self.topItem_1,["气动噪声"])
child_5 = QTreeWidgetItem(child_4,["受电弓噪声","66"])
child_6 = QTreeWidgetItem(child_4,["外壳气流噪声","66"])
self.topItem_2 = QTreeWidgetItem(self.treeWidget)
self.topItem_2.setText(0,"地铁")
child_7 = QTreeWidgetItem(self.topItem_2,["结构噪声","60"])
child_8 = QTreeWidgetItem(self.topItem_2,["电机噪声","50"])
child_9 = QTreeWidgetItem(self.topItem_2,["空调噪声","44"])
child_10 = QTreeWidgetItem(self.topItem_2,["气动噪声"])
child_11 = QTreeWidgetItem(child_10,["受电弓噪声","56"])
child_12 = QTreeWidgetItem(child_10,["外壳气流噪声","56"])
self.treeWidget.itemClicked.connect(self.treeWidget_clicked)# 信号与槽的连接
self.treeWidget.expandAll()
def treeWidget_clicked(self,item,column):
if item.text(1)!="":
self.textBrowser.append("噪声源:%s 噪声值:%s"%(item.text(0),item.text(1)))
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec())