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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python神经网络案例——CNN卷积神经网络实现mnist手写体识别[通俗易懂]

    python神经网络案例——CNN卷积神经网络实现mnist手写体识别[通俗易懂]全栈工程师开发手册(作者:栾鹏)python教程全解CNN卷积神经网络的理论教程参考http://blog.csdn.net/luanpeng825485697/article/details/79009241加载样本数据集首先我们要有手写体的数据集文件t10k-images.idx3-ubytet10k-labels.idx1-ubytetrain-imag…

    2022年5月11日
    51
  • 2018怎样发英文外链才能提升谷歌排名

    2018怎样发英文外链才能提升谷歌排名自从搜索引擎诞生以来,外链一直都是占比较重要的位置,但是谷歌一直在完善算法,让搜索引擎显示更好的搜索结果,2014年以前,通过软件群发外链,会收到不错的效果,但是现在谷歌搜索引擎已经可以识别这些不自然的外链,一旦你的网站再这些群发外链,就会被惩罚,严重的话,被K。我们一直坚守手工做高质量相关性外链,无论谷歌算法如何变,我们的网站一直迄立不倒!那么2018年,我们如何做高质量的相关性英文外链呢?1,…

    2022年5月13日
    53
  • 如何打开sln文件并显示窗口_在本机打开别人的sln文件[通俗易懂]

    如何打开sln文件并显示窗口_在本机打开别人的sln文件[通俗易懂]sln:在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合呵呵,今天没带书,就去网上找了个ASP.NET的源代码,叫简单实用的BLOG,一开始在web.config里捣鼓了半天,终于能把程序运行起来了,一看是MVP刘巍~真是意外啊。去看了看他的博客,言及两年来如何如何,及参加会议云云,想…

    2022年6月12日
    51
  • 什么是Deeplink?以及Deeplink的原理

    什么是Deeplink?以及Deeplink的原理先说一个日常场景帮大家理解。最近双十一、双十二,不知道大家有没有被亲友们发的某宝、某东、或拼夕夕的各类信息轮番轰炸?小编的亲友群、闺蜜群里常年有这类链接挂着,小红薯的笔记分享,某宝的化妆品、衣服链接分享等等,这一个个的分享链接织成一张张网,真可谓是增加亲友亲密度,快速获取优质好物的利器。这背后有个特别容易忽视却又极其重要的知识点。比如你在社交媒体上分享给翠花一个某App上的精选好店,翠花想要查看有几种操作方式:l如果翠花已经安装了该App,那她只要点开链接就可以跳转到App;l如果…

    2022年6月16日
    106
  • MySQL按天,按周,按月,按时间段统计【转载】

    MySQL按天,按周,按月,按时间段统计【转载】

    2021年5月15日
    140
  • ERP和MES、QAS以及APS在制造企业信息化的了解

    ERP和MES、QAS以及APS在制造企业信息化的了解ERP系统企业ERP系统标准的定义来自其英文原意,即企业资源规划(EnterpiseResourcePlanning)。企业ERP系统是一个对企业资源进行有效共享与利用的系统,通过信息系统对信息进行充分整理、有效传递、使企业的资源在购、存、产、销、人、财、物等各个方面能够得到合理地配置与利用,从而实现企业经营效率地提高。从本质上讲,企业ERP系统时一套信息系统,是一种工具。系统设计中可集成某些管理思想与内容,可帮助企业提升管理水平。另外一种说法认为企业ERP系统是将企业所有资源进行整合集成管理,简单

    2022年6月28日
    33

发表回复

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

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