pyqt5 列表控件_树形控件

pyqt5 列表控件_树形控件马上更

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

目录

一.凡心所向,素履所往

二.树控件(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_())

运行结果:

pyqt5 列表控件_树形控件

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

代码:

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_())

运行结果:

pyqt5 列表控件_树形控件   pyqt5 列表控件_树形控件 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_())

运行结果:

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

五.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_())

运行结果:

pyqt5 列表控件_树形控件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187280.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月1日 上午6:00
下一篇 2022年10月1日 上午6:00


相关推荐

  • DIKW体系

    DIKW体系source nbsp https zh wikipedia org wiki DIKW E4 BD 93 E7 B3 BBDIKW 体系 编辑 维基百科 自由的百科全书 DIKW 体系就是关于资料 Data 资讯 Information 知识 Knowledge 及智慧 Wisdom 的体系 当中每一层比下一层赋予某些特质 资料层是最基本的 资讯层加入内

    2026年3月19日
    2
  • Strands Agents速成班来了,带你从“调用API”进阶到“构建智能体”

    Strands Agents速成班来了,带你从“调用API”进阶到“构建智能体”

    2026年3月15日
    1
  • MIPS中一个字等于多少字节

    MIPS中一个字等于多少字节字节是 byte 包括 8 个二进制位 字是 word 长度与架构有关 如 mips 包括 32 个二进制位 一个字就是 4 个字节 它们的区别就是长度不一样 内存中是按字节寻值 因此是每 byte 也就是每 8 位存一个数值 当你想取一个 word 出来的时候 就是连续取了 4 个 byte 出来 然后拼成一个 word xx 位机的 xx 位是指字长 这个字和 word 不一样 是指这种 CPU 一次

    2025年9月14日
    6
  • 如何查看windows的CUDA版本「建议收藏」

    如何查看windows的CUDA版本「建议收藏」最近开始学习一些关于图像处理的计算机视觉的问题(跟着老师,开拓视野)首先就是安装anaconda环境(这个简单)然后老师要求使用pytorch作为我们学习的工具,于是上官网查看相应的pytorch的版本:只需要我们自己选择相应的系统,下载使用的工具方式,python的版本,以及CUDA版本号,就可以获得到相应的命令进行下载安装。这时遇到一个问题,CUDA是什么?CUDA(C…

    2022年6月14日
    170
  • recv、recvfrom[通俗易懂]

    recv、recvfrom[通俗易懂]1、recvfrom()接收一个数据报并保存源地址。(这里是windows中的头文件,Linux的用法在下面的那个实例)头文件:#include  #includeintrecvfrom(ints,void*buf,intlen,unsignedintflags,structsockaddr*from,int*fromlen);s:标

    2022年7月23日
    34
  • MATLAB-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化

    MATLAB-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化1.锐化1.锐化(Sharpening):图像在传输或变换过程中(如未聚焦好)、受到各种干扰而退化,典型的是图像模糊,而图像的判读和识别中,常需突出目标的轮廓或边缘信息。2.边缘锐化:主要增强图像的轮廓边缘、细节(灰度跳变部分灰度跳变部分),以突出图像中景物的边缘或纹理,形成完整的物体边界,使边缘和轮廓模糊的图像清晰,又叫空域高通滤波(俗称为勾边处理)。从数学角度看,图像模糊相当于图像………

    2025年6月20日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号