76 |
您所在的位置:网站首页 › qtreewidget和qtreeview区别 › 76 |
树结构控件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 = )-> None QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem,strings: Sequence[str],type: int = )-> None QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem,type: int = )-> None QTreeWidgetItem(strings: Sequence[str],type: int = )-> None QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget,after: PySide6.QtWidgets.QTreeWidgetItem,type: int = )-> None QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget,strings: Sequence[str],type: int = )-> None QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget,type: int = )-> None QTreeWidgetItem(type: int = )-> 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()选择的项发生改变时发送信号 树结构项QTreeWidgetItemQTreeWidgetItem类提供了一个与QTreeWidget便利类一起使用的项。 from PySide6.QtWidgets import QTreeWidgetItem QTreeWidgetItem(other: PySide6.QtWidgets.QTreeWidgetItem)-> None QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem, after: PySide6.QtWidgets.QTreeWidgetItem, type: int = )-> None QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem, strings: Sequence[str], type: int = )-> None QTreeWidgetItem(parent: PySide6.QtWidgets.QTreeWidgetItem, type: int = )-> None QTreeWidgetItem(strings: Sequence[str], type: int = )-> None QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget, after: PySide6.QtWidgets.QTreeWidgetItem, type: int = )-> None QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget, strings: Sequence[str], type: int = )-> None QTreeWidgetItem(treeview: PySide6.QtWidgets.QTreeWidget, type: int = )-> None QTreeWidgetItem(type: int = )-> 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子类中定义新的用户类型,以确保对自定义项进行特殊处理;例如,当项目被排序时。 ConstantDescriptionQTreeWidgetItem.Type树小部件项的默认类型。QTreeWidgetItem.UserType自定义类型的最小值。UserType以下的值由Qt保留。PySide6.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy ConstantDescriptionQTreeWidgetItem.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返回用于描述项目的标志。这些决定了是否可以检查、编辑和选择项目。标志的默认值为`ItemIsSelectablefont(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)-> NonesetTextAlignment(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 的应用实例 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |