Python Qt学习(八)Treeview

源代码:

# -*- 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.translateMainWindow.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: "+v3self.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()+1self.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())        

截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/114570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据Flink(七十):SQL 动态表 连续查询

文章目录 SQL 动态表 & 连续查询 一、​​​​​​​SQL 应用于流处理的思路

ssm园区停车管理系统源码和论文

ssm园区停车管理系统源码和论文104 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用&#x…

Gatling 入门

1.新建一个测试接口项目 里面代码非常简单,就一个hi接口: package com.example.gatlingdemo.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import java.ti…

拼多多开放平台的API接口可以获取拼多多电商数据。以下是API接口流程

使用拼多多开放平台的API接口可以获取拼多多电商数据。以下是一般的API接口流程: 1. 注册开发者账号:首先,您需要在拼多多开放平台注册一个开发者账号。通过开发者账号,您可以获得API密钥和其他必要的信息。 2. 鉴权与认证&…

33、Flink之hive介绍与简单示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

给oracle逻辑导出clob大字段、大数据量表提提速

文章目录 前言一、大表数据附:查询大表 二、解题思路1.导出排除大表的数据2.rowid切片导出大表数据Linux代码如下(示例):Windows代码如下(示例):手工执行代码如下(示例)&…

vite 配置自动补全文件的后缀名

vite 不建议自动补全,文件的后缀名的 const Home ()>import("/views/Home.vue");文件是必须要加上 .vue 的后缀名的 如果 想要像 webpack 一样的不用写, 可以在vite.config.js中配置如下就可以了

【iOS】Masonry的基本使用

文章目录 前言一、使用Masonry的原因二、约束的常识三、Masonry的简单使用四、Masonry的用例总结 前言 暑假安装了cocoapods,简单使用其调用了SVGKit,但是没有学习Masonry,特此总结博客记录Masonry的学习 一、使用Masonry的原因 Masonry是一…

持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践

文章目录 持续集成(CI)的最佳实践持续交付(CD)的最佳实践云计算环境下的特别注意事项 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏&am…

docker启动paddlespeech服务,并使用接口调用

一、检查docker容器是否启动 1.输入命令 systemctl status docker 启动 systemctl start docker 守护进程重启 sudo systemctl daemon-reload 重启docker服务 systemctl restart docker 重启docker服务 sudo service docker restart 关闭docker service docker…

Django实现音乐网站 ⒂

使用Python Django框架制作一个音乐网站, 本篇主要是歌手详情页-基本信息、单曲列表功能开发实现内容。 目录 歌手基本信息 增加路由 显示视图 模板显示 推荐歌手跳转详情 歌手增加基本信息 表模型增加字段 数据表更新 基本信息增加内容渲染 歌手单曲列表…

TL6478(TI TMS320C6748 DPS)EVM开发板技术讲座 第二讲:USB转串口驱动安装

在开展我们的TL 6748 DSP开发版开发之前,需要先安装usb转串口驱动,才能使得我们的电脑上查询到该设备,使用该设备。底板上存在UART1、UART2,将评估板的 UART2 RS232 调试串口通过 RS232 交叉串口母母线、USB 转 RS232 公头串口线连接至 PC 机的 USB 接口。1. 驱动下载 USB…

TCP协议基础

一: TCP协议是什么? TCP协议是基于面向连接,可靠传输,基于字节流的传输层通信协议 1. 面向连接 TCP协议是一种面向连接的协议,意味着在双方在建立数据传输之前,需要进行一个逻辑上的连接,且是…

分布式搜索引擎

1 DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一…

【ES6】—类与继承

一、 定义类 class People {constructor (name, age) {this.name namethis.age age}showName () {console.log(this.name)} } let p1 new People(xiaoxiao, 30) console.log(p1) // People {name: xiaoxiao, age: 30}小节: 使用class关键字声明类使用construc…

瓜分双十一10亿红包设计:在线分享教程?

在如今激烈的市场竞争中,瓜分红包营销活动成为了各大企业争相使用的一种营销手段。这种活动不仅能够吸引用户的关注和参与,还能够提高用户的粘性和忠诚度。那么,如何自建瓜分红包营销活动呢?下面将为大家详细解析。 首先&#xff…

Mysql高阶语句 (一)

一、常用查询 (增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等 1、按关键字排序 PS:类比于windows 任务管理器 使用 SELECT 语句…

Ansible自动化运维工具

Ansible自动化运维工具 一、Ansible介绍1.Ansible工具:2.Ansible特点及优势3.Ansible核心程序4.Ansible的工作原理及流程 二、部署ansible自动化1.管理端安装ansible2.ansible 目录结构3.配置主机清单4.配置密钥对验证 三、ansible 命令行模块1.command 模块2.shell…

java八股文面试[多线程]——AQS 详细介绍

线程同步除了Synchronized Volatile ReentranLock 之外,还有其他一些用来进行同步的机制。 AQS 简单介绍 AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。 AQS 是一个用来构建锁和同步器…

开启智能时代:深度解析智能文档分析技术的前沿与应用

开启智能时代:深度解析智能文档分析技术的前沿与应用 本章主要介绍文档分析技术的理论知识,包括背景介绍、算法分类和对应思路。通过本文学习,你可以掌握:1. 版面分析的分类和典型思想 2. 表格识别的分类和典型思想 3. 信息提取的…