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

注意,本文比较简单粗暴,都是干货,虽然标题上是使用详解,但没有什么过多的原理与解释,拿来就能使用,建议先收藏后再看。

一、类继承关系图

二、常用方法与信号

(一) QTreeWidget常用方法:        

1.QTreeWidget类中的常用方法

方法描述
addTopLevelItem(item)QTreeWidget组件增加单个根节点item
addTopLevelItems(items)QTreeWidget组件增加多个根节点item
setHeaderLabels(labels)设置标题列并为每个列设置标签
setColumnWidth(column, num)设置列宽
setColumnCount()设置树形部件的列数
setItemWidget(item,column,widget)为指定列的item设置小部件
removeItemWidget()移除指定条目和列的单元格处的小部件
itemWidget()获取指定条目和列的单元格处的小部件
setCurrentItem()设置当前条目
removeItemWidget(item,column)为指定列的item删除小部件
insertTopLevelItem(index,item)在索引位置插入单个根节点
insertTopLevelItems(index,items)在索引位置插入多个根节点
takeTopLevelItem(index)删除指定索引位置的根节点
findItems(text,flags[,column=0])使用给定的标志查找文本与字符串文本匹配的项目
currentItem()返回当前item对象
columnCount()返回所有列数
currentColumn()返回当前项的列索引
setHeaderItem() 设置属性部件的表头,表头中每列的标签由条目中相应标签提供
setHeaderLable()在表头添加一列,并为该列设置一个标签
headerItem()返回标题项item对象
indexOfTopLevelItem(item)返回给定根节点item的索引值
topLevelItem(index)返回给定索引处的根节点item,如果该项目不存在,则返回None。
topLevelItemCount()返回根节点item的数量。默认情况下,此属性的值为0。
selectedItems()返回所有选定非隐藏项目的列表
isItemExpanded(item)判断指定item根节点是否展开,返回bool
isItemHidden(item)判断指定item根节点是否隐藏,返回bool
isItemSelected(item)判断指定item根节点是否选择,返回bool
setSortingEnabled()启用或禁用排序
isSortingEnabled()是否启用了排序功能
clear()清除其所有item
collapseItem()    折叠指定的条目
expandItem()展开指定的条目

2. QTreeWidgetItem类中常用的方法

方法描述
addChild(child)QTreeWidgetItem组件增加单个子节点item
addChildren(children)QTreeWidgetItem组件增加多个子节点item
setText(column,text)设置文本名称为指定列的子节点item
setCheckState(column,state)设置复选状态为指定列的子节点item
Qt.Checked:选中状态
Qt.PartiallyChecked:半选中状态
Qt.Unchecked:没有被选中
setIcon(column,icon)设置图标为指定列的子节点item
setExpanded(expand)设置子节点item为是否展开
setHidden(hide)设置子节点item为是否隐藏
setSelected(select)设置要选择的项目的选择状态
setFlags(flags)设置列表项的项目标志设置为flags
setTextAlignment(column,alignment)节点文本对齐方式
Qt.AlignLeft:将单元格内的内容沿单元格的左边缘对齐
Qt.AlignRight:将单元格内的内容沿单元格的右边缘对齐
Qt.AlignHCenter:在可用空间中,居中显示在水平方向上
Qt.AlignJustify:将文本在可用空间内对齐,默认从左到右
Qt.AlignTop:与顶部对齐
Qt.AlignBottom:与底部对齐
Qt.AlignVCenter:在可用空间中,居中显示在垂直方向上
Qt.AlignBaseline:与基线对齐
insertChild(index,child)在索引位置插入单个子节点
insertChildren(index,children)在索引位置插入多个子节点
takeChild(index)删除索引处的子节点并返回它,否则返回0
takeChildren()删除子级列表并返回它,否则返回一个空列表
removeChild(child)删除指定的子节点item
parent()返回项目的父项
treeWidget()返回包含该项目的QTreeWidget
text(column)返回指定列的文本值
indexOfChild(child)返回给定子节点item的索引值
child(index)返回指定索引的子节点item
childCount()返回子节点的数量
columnCount()返回子节点的列数
isDisabled()判断该项是否被禁用,禁用则返回True;否则返回False。
isExpanded()判断该项是否被展开,展开则返回True,否则返回False。
isHidden()判断该项是否被隐藏,隐藏则返回True,否则返回False。
isSelected()判断该项是否被选择,选择则返回True,否则返回False。

(二)QTreeWidget常用信号

信号描述
itemClicked(item,column)当用户单击item节点时,发出信号
itemDoubleClicked(item,column)当用户双击item节点时,发出信号
itemChanged(item,column)当指定节点中列的内容发生更改时,发出信号
currentItemChanged(current,previous)当前节点更改时,发出信号
itemCollapsed(item)折叠指定节点时,发出信号
itemExpanded(item)展开指定节点时,发出信号
itemEntered(item,column)当鼠标光标进入指定列上的项目时,发出信号
itemPressed(item,column)用户在窗口内按下鼠标按钮时,发出信号
itemSelectionChanged()当树构件中的选择发生变化时,发

三、创建树QTreeWidget

创建布局,创建QTreeWidget对象,短短几句,已经可以将一个大致的树形框架显示出来了。

layout = QVBoxLayout()
self.setLayout(layout)     
self.tree = QTreeWidget()        
layout.addWidget(self.tree)  # 将人员树加入布局 

对树的整体设置有以下几个要点:

(一)设置整个树的大小

将树的大小显示为宽300,高600的大小。

self.tree.resize(300,600)

(二)设置树的信息列数及每列宽度

self.tree.setColumnCount(2)      # 2列值的树
self.tree.setColumnWidth(0,300)  # 第1列宽度300

(三)节点的展开技巧

1. 节点全部展开

self.tree.expandAll()

这条命令一般在树形程序的结尾使用,使用这条指令后,整个树全部呈现展开状态,包括各个子节点。

2.指定节点展开

self.tree.expandItem(node)      # 展开添加的节点

使用这条指令后,直接展开添加的节点,便于对新添加的节点进行编辑。

四、QTreeWidgetItem

(一)双击条目可编 辑

self.tree.itemDoubleClicked.connect(self.edit_Item) 

def edit_Item(self):
        item = self.tree.selectedItems()
        print(item)
        if item:
            item = item[0] 
            item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsEditable) 

实现的功能如下:

(二)设置条目的行高

item.setSizeHint(0, QSize(0, 30))

其中:0为行号,Qize(0,30)中0宽度,表示不控制,30表示高度

(三)设置条目中的字体及字的大小

item_font = QFont()
item_font.setFamily('微软雅黑')
item_font.setPointSize(14)  # 设置字号大小

Item.setFont(0, item_font)   

setFont(0,font)参数意义:

官方文档中是这样定义的

                 void QTreeWidgetItem::setFont(int column, const QFont &font)

实现效果如下:

五、对树的各种设置

(一)设置弹出菜单

1.打开弹出菜单模式

# 打开鼠标右键单击菜单
self.tree.setContextMenuPolicy(Qt.CustomContextMenu) 

2. 连接弹出菜点信号

self.tree.customContextMenuRequested.connect(self.show_context_menu)  # 绑定菜单

3. 自定义弹出菜单

def show_context_menu(self, pos):
        menu = QMenu(self)
        action = menu.addAction('添加人员')
        action.triggered.connect(self.addNode)
        action = menu.addAction('修改人员')
        action.triggered.connect(self.updateNode)
        action = menu.addAction('删除人员')
        action.triggered.connect(self.deleteNode)
        menu.exec_(QCursor.pos())

4. 自定主义弹出菜单每一项选中后的功能函数

# 添加人员
def addNode(self):
    print('添加节点')
    item = self.tree.currentItem()
    print(item)
    node = QTreeWidgetItem(item)
    node.setText(0, '新人')
    node.setText(1, '新值')

此处仅实例展示一个菜单功能函数。注意看第3步,弄清楚它是如何实现与信号的连接的。

(二)节点的拖拽功能

 打开拖拽模式

# 打开拖拽模式

self.tree.setDragDropMode(QAbstractItemView.InternalMove)

主要拖拽模式设置有以下几种:

                NoDragDrop,      不允许拖拽
                DragOnly,           只允许拖出
                DropOnly               只允许拽进
                DragDrop              允许拖出和拽进
                InternalMove         允许内部拖搜

拖动功能演示见 3-1 双击条目可编 辑

(三)设置节点内容

1.一般节点信息设置方法

这个要和QTreeWidgetItem控件配合使用。

rootItem = QTreeWidgetItem(self.tree)
rootItem.setText(0,'张公')
rootItem.setText(1,'1世')
2.通过读入xml文件实现信息写入的方法

xml信息如下:

程序实现的结果如下:

由于这部分内容涉及的知识点较多,后期我会专门写一篇文章进行详述。示例程序和数据文件,可以通过下载以下资源获得:https://download.csdn.net/download/qq_58168857/88591317?spm=1001.2014.3001.5503

收集整理不易,您的一键三连是对我的最大支持!

  • 16
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
好的,下面是一个Python GUIPyQt5中QComboBox控件使用方法和实例: QComboBox是PyQt5中的一个下拉列表框控件,可以方便地在图形界面中实现下拉列表框功能。以下是QComboBox控件的详细使用方法和实例: 1. 在PyQt5中导入QComboBox控件: ``` python from PyQt5.QtWidgets import QComboBox ``` 2. 创建一个QComboBox控件对象: ``` python combo_box = QComboBox() ``` 3. 添加下拉列表框选项: 可以通过addItem()方法添加下拉列表框选项,也可以在创建QComboBox控件时直接传入选项列表: ``` python combo_box.addItem('选项1') combo_box.addItem('选项2') combo_box.addItem('选项3') # 或者 options = ['选项1', '选项2', '选项3'] combo_box = QComboBox(self) combo_box.addItems(options) ``` 4. 获取当前选中的选项: 可以通过currentIndex()方法获取当前选中的选项的索引值,也可以通过currentText()方法获取当前选中的选项的文本内容: ``` python index = combo_box.currentIndex() text = combo_box.currentText() ``` 5. 为下拉列表框添加事件: 可以为下拉列表框添加事件,例如选项改变时触发事件。可以通过currentIndexChanged()方法来实现: ``` python combo_box.currentIndexChanged.connect(self.on_combo_box_changed) def on_combo_box_changed(self, index): # index为当前选中的选项的索引值 print(index) ``` 下面是一个完整的例子: ``` python from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QComboBox, QVBoxLayout import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('QComboBox控件使用例子') self.setGeometry(300, 300, 300, 200) label = QLabel('请选择一项:', self) combo_box = QComboBox(self) combo_box.addItem('选项1') combo_box.addItem('选项2') combo_box.addItem('选项3') combo_box.currentIndexChanged.connect(self.on_combo_box_changed) layout = QVBoxLayout() layout.addWidget(label) layout.addWidget(combo_box) self.setLayout(layout) self.show() def on_combo_box_changed(self, index): print(index) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 该例子创建了一个窗口,包含一个QLabel控件和一个QComboBox控件,当选项改变时会触发on_combo_box_changed()方法。当选项改变时,会在控制台输出当前选中的选项的索引值。 希望这个例子能够帮助你理解使用PyQt5中的QComboBox控件
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃饭的家伙事儿

您的鼓励是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值