Python Qt学习(八)Treeview

本文介绍了使用Python的PyQt5库创建一个带有树视图功能的窗口,展示了如何初始化树、获取当前节点、插入新行和删除节点的操作方法。

源代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_treeview.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication
import sys
from collections import deque
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")            
        
        self.treeView = QtWidgets.QTreeView(self.centralwidget)
        self.treeView.setGeometry(QtCore.QRect(10, 10, 391, 511))
        self.treeView.setObjectName("treeView")
        self.treeView.setAlternatingRowColors(True)

        self.treeModel = QtGui.QStandardItemModel()
        self.treeModel.setHorizontalHeaderLabels(['Item', 'Level', 'Sequence'])
        self.treeView.setModel(self.treeModel)

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(470, 70, 211, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.initTree)

        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(470, 120, 211, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.getCurrentNode)

        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(470, 170, 211, 28))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.insertNewRow)

        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(470, 220, 211, 28))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.appendNewRow)

        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(470, 270, 211, 28))
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_5.clicked.connect(self.deleteRow)

        MainWindow.setCentralWidget(self.centralwidget)


        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Init Tree"))
        self.pushButton_2.setText(_translate("MainWindow", "Get Current Node"))
        self.pushButton_3.setText(_translate("MainWindow", "Insert Node Before Current Node"))
        self.pushButton_4.setText(_translate("MainWindow", "Insert Node After Current Node"))
        self.pushButton_5.setText(_translate("MainWindow", "Delete Current Node"))

    def show(self, Form):
        Form.show()
    
    def initTree(self):
        root=self.treeModel.invisibleRootItem()
        self.treeModel.insertRow(0)
        self.treeModel.setData(self.treeModel.index(0,0), "Line 1")
        self.treeModel.setData(self.treeModel.index(0,1), "1")
        self.treeModel.setData(self.treeModel.index(0,2), "1")

        self.treeModel.insertRow(1)
        self.treeModel.setData(self.treeModel.index(1,0), "Line 2")
        self.treeModel.setData(self.treeModel.index(1,1), "1")
        self.treeModel.setData(self.treeModel.index(1,2), "2")

        self.treeModel.insertRow(2)
        self.treeModel.setData(self.treeModel.index(2,0), "Line 3")
        self.treeModel.setData(self.treeModel.index(2,1), "1")
        self.treeModel.setData(self.treeModel.index(2,2), "3")

        parent=self.treeModel.item(0)
        parent.appendRow([
            QStandardItem('Line 1-1'),
            QStandardItem('2'),
            QStandardItem('1'),
        ])

        parent.appendRow([
            QStandardItem('Line 1-2'),
            QStandardItem('2'),
            QStandardItem('2'),
        ])


        parent=self.treeModel.item(1)
        parent.appendRow([
            QStandardItem('Line 2-1'),
            QStandardItem('2'),
            QStandardItem('3'),
        ])

    def getCurrentNode(self):
        select_item=self.treeView.selectedIndexes()
        v1=select_item[0].data()
        v2=select_item[1].data()
        v3=select_item[2].data()
        msg="Curent Node:\r\n"+"Column 1: " + v1 + "\r\n" + "Column 2: " + v2 + "\r\n" + "Column 3: "+v3
        self.messageBox(msg)

    def messageBox(self,msg):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setIcon(QtWidgets.QMessageBox.Icon.Information)
        msgBox.setWindowTitle("Qt Message Box")
        msgBox.setText(msg)
        msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel)
        returnValue = msgBox.exec()        

    def insertNewRow(self):
        select_item=self.treeView.currentIndex()
        if select_item.parent().row() == -1:
            index=select_item.row()
            self.treeModel.insertRow(index)
            self.treeModel.setData(self.treeModel.index(index,0),'New Item')
        else:
            index=select_item.parent().row()
            parent=self.treeModel.item(index)
            parent.insertRow(select_item.row(), [QStandardItem('New Subitem')])
                
    
    def appendNewRow(self):
        select_item=self.treeView.currentIndex()
        if select_item.parent().row() == -1:
            index=select_item.row()+1
            self.treeModel.insertRow(index)
            self.treeModel.setData(self.treeModel.index(index,0),'New Item')  
        else:
            index=select_item.parent().row()
            parent=self.treeModel.item(index)
            parent.insertRow(select_item.row()+1, [QStandardItem('New Subitem')])

    def deleteRow(self):
        select_item=self.treeView.currentIndex()
        if select_item.parent().row() == -1:
            index=select_item.row()
            self.treeModel.removeRow(index)
        else:
            index=select_item.parent().row()
            parent=self.treeModel.item(index)
            parent.removeRow(select_item.row())
            

if __name__ == "__main__":
    app = QApplication(sys.argv)
    Form=QtWidgets.QMainWindow()    
    main_win = Ui_MainWindow()    
    main_win.setupUi(Form)
    main_win.show(Form)
    
    sys.exit(app.exec())        

截图:

【课程特点】1、231节大容量课程:包SwiftUI的大部分知识点,详细讲解SwiftUI的方方面面;2、15个超级精彩的实例:包美食、理财、健身、教育、电子商务等各行业的App实例;3、创新的教学模式:手把手教您SwiftUI用户界面开发技术,一看就懂,一学就会;4、贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标;5、语言简洁精练:瞄准问题的核心所在,减少对思维的干扰,并节省您宝贵的时间;6、视频短小精悍:即方便于您的学习记忆,也方便日后对功能的检索;7、齐全的学习资料:提供所有课程的源码; 更好的应用,更少的代码!SwiftUI是苹果主推的下一代用户界面搭建技术,具有声明式语法、实时生成界面预览等特性,可以为苹果手机、苹果平板、苹果电脑、苹果电视、苹果手表五个平台搭建统一的用户界面。SwiftUI是一种创新、简单的iOS开发中的界面布局方案,可以通过Swift语言的强大功能,在所有的Apple平台上快速构建用户界面。 仅使用一组工具API为任何Apple设备构建用户界面。SwiftUI具有易于阅读自然编写的声明式Swift语法,可与新的Xcode设计工具无缝协作,使您的代码设计**同步。自动支持动态类型、暗黑模式、本地化可访问性,意味着您的**行SwiftUI代码已经是您编写过的非常强大的UI代码了。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值