2025年pyqt5 列表控件_树形控件

pyqt5 列表控件_树形控件目录 一 凡心所向 素履所往 二 树控件 QTreeWidget 基本用法 三 为树节点添加响应时间 四 增加 修改和删除树控件的节点 五 QTreeView 控件与系统定制模式 一 凡心所向 素履所往 前天晚上朋友 A 请客 我欣然赴约 一起的还有朋友 A 的一个朋友 B 是啊 每每见到大佬都不由得感慨一下 吾等太渺小了 A 是发小 和我同岁 但是比我大一级 但现在已经是国科大直博生在读

目录

一.凡心所向,素履所往

二.树控件(QTreeWidget)基本用法

三.为树节点添加响应时间

四.增加,修改和删除树控件的节点

五.QTreeView控件与系统定制模式

----

一.凡心所向,素履所往

前天晚上朋友A请客,我欣然赴约,一起的还有朋友A的一个朋友B,是啊,每每见到大佬都不由得感慨一下,吾等太渺小了。

A是发小,和我同岁,但是比我大一级,但现在已经是国科大直博生在读,B是北邮的研一在读。饭间在讨论专业技术的事,因为都是搞计算机的,虽然方向不一样,但也算同行。

其间也谈谈人生,聊聊感触,但是听他们说起来项目,实习,比赛,收入等等,感觉真的不是一个层次的人,哎,变强的路上自闭真的是难免的。

饭后也是九点多了吧,我就直接住在A家了。

虽然我没有他们那样的本事,但是初心要贯彻到底,为自己喜欢的事情奋斗终身又何尝不是一件很酷的事呢。

今天玩了一天,傍晚回到家,饭后,写下此感,诸君共勉。

二.树控件(QTreeWidget)基本用法

代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class BasicTreeWidget(QMainWindow):
def __init__(self,parent=None):
super(BasicTreeWidget, self).__init__(parent)
self.setWindowTitle('树控件(QTreeWidget)的基本用法')
self.resize(500,300)

#树
self.tree=QTreeWidget()
#为树控件指定列数
self.tree.setColumnCount(2)
#指定列标签
self.tree.setHeaderLabels(['Key','Value'])

#根节点
root=QTreeWidgetItem(self.tree)
root.setText(0,'根节点') # 0代表第一列,即Key列
root.setIcon(0,QIcon('../picture/bag/bag1.jpg')) #为节点设置图标
self.tree.setColumnWidth(0,200)#第一列列宽设为200

#添加子节点1
child1=QTreeWidgetItem(root)
child1.setText(0,'子节点1')#第一列Key为 子节点1
child1.setText(1,'子节点1的数据')#第二列Value为 子节点1的数据
child1.setIcon(0,QIcon('../picture/bag/bag2.jpg'))
#设置子节点1开启复选框状态
child1.setCheckState(0,Qt.Checked)

# 添加子节点2
child2=QTreeWidgetItem(root)
child2.setText(0,'子节点2')
child2.setIcon(0,QIcon('../picture/bag/bag3.jpg'))

#为child2添加一个子节点
child3=QTreeWidgetItem(child2)
child3.setText(0,'子节点2-1')
child3.setText(1,'新的值')
child3.setIcon(0,QIcon('../picture/bag/bag4.jpg'))

#默认所有节点都处于展开状态
self.tree.expandAll()

#将树控件设为中心控件,即树控件会自动铺满整个屏幕
self.setCentralWidget(self.tree)


if __name__=='__main__':
app=QApplication(sys.argv)
main=BasicTreeWidget()
main.show()
sys.exit(app.exec_())

运行结果:

三.为树节点添加响应时间

代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class TreeEvent(QMainWindow):
def __init__(self,parent=None):
super(TreeEvent, self).__init__(parent)
self.setWindowTitle('为树添加响应事件')
self.resize(400,300)

#树
self.tree=QTreeWidget()
#为树控件指定列数
self.tree.setColumnCount(2)
#指定列标签
self.tree.setHeaderLabels(['Key','Value'])

#根节点
root=QTreeWidgetItem(self.tree)
root.setText(0,'root') # 0代表第一列,即Key列,值为root
root.setText(1,'0')

#添加子节点child1
child1=QTreeWidgetItem(root)
child1.setText(0,'child1')
child1.setText(1,'1')

# 添加子节点child2
child2=QTreeWidgetItem(root)
child2.setText(0,'child2')
child2.setText(1,'2')

#为child2添加一个子节点child3
child3=QTreeWidgetItem(child2)
child3.setText(0,'child3')
child3.setText(1,'3')

#信号和槽
self.tree.clicked.connect(self.onTreeClicked)

#将树控件设为中心控件,即树控件会自动铺满整个屏幕
self.setCentralWidget(self.tree)

def onTreeClicked(self,index): #index是被点击节点的索引
item=self.tree.currentItem()#获得当前单击项
print('当前处于第%d行'%index.row())#输出当前行(自己父节点的第几个值)
print('key=%s,value=%s'%(item.text(0),item.text(1)))
print()


if __name__=='__main__':
app=QApplication(sys.argv)
main=TreeEvent()
main.show()
sys.exit(app.exec_())

运行结果:

eg:child1是root的第一个节点,故行数是0;child2是root的第二个节点,故行数是1;child3是child2的第一个节点,故行数是0

四.增加,修改和删除树控件的节点

代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class ModifyTree(QWidget):
def __init__(self,parent=None):
super(ModifyTree, self).__init__(parent)
self.setWindowTitle('增加修改和删除树控件中的节点')
self.resize(400,300)
operatorLayout=QHBoxLayout()#水平布局
addBtn=QPushButton('添加节点')
updateBtn=QPushButton('修改节点')
deleteBtn=QPushButton('删除节点')
operatorLayout.addWidget(addBtn)
operatorLayout.addWidget(updateBtn)
operatorLayout.addWidget(deleteBtn)
addBtn.clicked.connect(self.addNode)
updateBtn.clicked.connect(self.updateNode)
deleteBtn.clicked.connect(self.deleteNode)
# 树
self.tree = QTreeWidget()
# 为树控件指定列数
self.tree.setColumnCount(2)
# 指定列标签
self.tree.setHeaderLabels(['Key', 'Value'])
# 根节点
root = QTreeWidgetItem(self.tree)
root.setText(0, 'root') # 0代表第一列,即Key列,值为root
root.setText(1, '0')
# 添加子节点child1
child1 = QTreeWidgetItem(root)
child1.setText(0, 'child1')
child1.setText(1, '1')
# 添加子节点child2
child2 = QTreeWidgetItem(root)
child2.setText(0, 'child2')
child2.setText(1, '2')
# 为child2添加一个子节点child3
child3 = QTreeWidgetItem(child2)
child3.setText(0, 'child3')
child3.setText(1, '3')
# 信号和槽
self.tree.clicked.connect(self.onTreeClicked)
mainLayout=QVBoxLayout(self)
mainLayout.addLayout(operatorLayout)
mainLayout.addWidget(self.tree)
self.setLayout(mainLayout)
def onTreeClicked(self, index): # index是被点击节点的索引
item = self.tree.currentItem() # 获得当前单击项
print('当前处于第%d行' % index.row()) # 输出当前行(自己父节点的第几个值)
print('key=%s,value=%s' % (item.text(0), item.text(1)))
print()
def addNode(self):
print('添加节点')
item=self.tree.currentItem()# 获得当前结点
print('当前节点是:',item)
node=QTreeWidgetItem(item)
node.setText(0,'新节点')
node.setText(1,'新值')
def updateNode(self):
print('修改节点')
item=self.tree.currentItem()
item.setText(0,'修改节点')
item.setText(1,'值已经被修改')
def deleteNode(self):
print('删除节点')
#防止item是root时,root无父结点报错,要使用下面的写法
rootFather=self.tree.invisibleRootItem()#获得根节点root的不可见的父节点
for item in self.tree.selectedItems():
#父节点不为空
(item.parent() or rootFather).removeChild(item)
if __name__=='__main__':
app=QApplication(sys.argv)
main=ModifyTree()
main.show()
sys.exit(app.exec_())

运行结果:

五.QTreeView控件与系统定制模式

一般复杂的树控件用QTreeView来写

代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
if __name__=='__main__':
app=QApplication(sys.argv)
#显示目录结构的模型
model=QDirModel()
tree=QTreeView()
tree.setModel(model)
tree.setWindowTitle('QTreeView')
tree.resize(600,400)
tree.show()
sys.exit(app.exec_())

运行结果:

编程小号
上一篇 2025-02-10 22:21
下一篇 2025-01-29 08:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/130273.html