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.hqwc.cn/news/91006.html

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

相关文章

Jmeter和Postman那个工具更适合做接口测试?

软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中,有高手,自然也会有小白,但有一点我们无法否认,就是每一个高手都是从小白开始的,所以今天我们就来谈谈一大部分人在做的接口测试,小白变高手…

什么是 ORAM

参考文献: [GO96] Goldreich O, Ostrovsky R. Software protection and simulation on oblivious RAMs[J]. Journal of the ACM (JACM), 1996, 43(3): 431-473.[Batcher68] Batcher K E. Sorting networks and their applications[C]//Proceedings of the April 30…

进程间通信之System V 共享内存

文章目录 一、共享内存 进程具有独立性,因此进程间通信的前提是两个进程能看到同一份资源 一、共享内存 在内存中申请一块空间,并将起始地址分别映射到两个进程的虚拟地址空间上,便可以让两个进程看到同一份资源 操作系统为了管理共享内存&…

基于Python+OpenCV智能答题卡识别系统——深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境PyCharm安装OpenCV环境 模块实现1. 信息识别2. Excel导出模块3. 图形用户界面模块4. 手写识别模块 系统测试1. 系统识别准确率2. 系统识别应用 工程源代码下载其它资料下载 前言 本项目基于Python和OpenCV图像处…

[maven]关于pom文件中的<relativePath>标签

关于pom文件中的<relativePath>标签 为什么子工程要使用relativePath准确的找到父工程pom.xml.因为本质继承就是pom的继承。父工程pom文件被子工程复用了标签。&#xff08;可以说只要我在父工程定义了标签&#xff0c;子工程就可以没有&#xff0c;因为他继承过来了&…

微信开发之一键踢出群聊的技术实现

简要描述&#xff1a; 删除群成员 请求URL&#xff1a; http://域名地址/deleteChatRoomMember 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选…

MySQL的字符转义

表象 表结构如下: 其中 content 字段存放json之后的数据,这个json数据里面 extra 字段的内容又是一段json,如下: INSERT INTO future.test_escape_character( id, title, content, is_del )VALUES ( 2, 我的博客, {"web_id":31415,"name":"清澄秋…

云计算中的负载均衡技术,确保资源的平衡分配

文章目录 1. 硬件负载均衡器2. 软件负载均衡器3. DNS负载均衡4. 内容分发网络&#xff08;CDN&#xff09; &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;云计算 ✨文章内…

CA证书颁发机构服务器

目录 一、CA证书颁发机构是什么&#xff1f; 二、数字证书可以干什么&#xff1f; 三、PKI&#xff1a;即公钥加密体系&#xff08;public key cryptography&#xff09; 四、CA在网络中的工作流程及原理&#xff08;以网站为例&#xff09; 五、HTTPS 的工作原理 六、CA私有证…

uview ui 1.x ActonSheet项太多,设置滚动(亲测有效)

问题&#xff1a;ActionSheet滚动不了。 使用uview ui &#xff1a;u-action-sheet, 但是item太多&#xff0c;超出屏幕了&#xff0c; 查了一下文档&#xff0c;并没有设置滚动的地方。 官方文档&#xff1a;ActionSheet 操作菜单 | uView - 多平台快速开发的UI框架 - uni-a…

数据时代的必备利器:数据可视化工具的崭新价值

在当今信息时代&#xff0c;数据扮演着越来越重要的角色&#xff0c;而数据的可视化呈现正是一种强大的工具&#xff0c;能够帮助我们更好地理解和利用这些数据。虽然Excel和PPT在处理数据方面有着不可否认的作用&#xff0c;但在处理大规模、复杂数据时&#xff0c;数据可视化…

RabbitMQ工作模式-工作队列

官网关于工作模式的解释地址&#xff1a;https://www.rabbitmq.com/getstarted.html Work Queue&#xff08;工作队列&#xff09; 生产者发消息&#xff0c;启动多个消费者来消费消息&#xff0c;每个消费者仅消费部分消息&#xff0c;可达到负载均衡的效果。 创建生产者 i…