Pyqt5--解析json并将内容显示在tableWidget

2023-11-22 18:59

本文主要是介绍Pyqt5--解析json并将内容显示在tableWidget,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在开始写本博客的案例之前,梳理下功能点和知识点,方便查找和理解。

功能介绍:

1.生成json数据;

2.解析json数据并将内容显示在tableWidget中;

3.获取lineEdit中输入的内容,并将其显示在tableWidget中。

知识点梳理:

1.json

json是一种易于阅读和编写的数据交换格式。

json.dumps()函数是将字典转化为字符串------jsonStr = json.dumps(strData)

json.loads()函数是将字符串转化为字典--------res = json.loads(jsonStr)

2.Qt Designer界面设计--比较简单

控件,信号和槽的使用可以参考https://blog.csdn.net/maidu_xbd/article/details/85696510

3.tableWidget

self.ui.tableWidget.setColumnCount(5) # 设置表格的列数

self.ui.tableWidget.setRowCount(100) #设置表格的行数

mTitle = QTableWidgetItem(item['name']) #显示数据

mTitle.setTextAlignment(Qt.AlignCenter) # 设置文字显示居中

mTitle.setFlags(Qt.ItemIsEnabled) # 设置表格不可编辑模式

4.Label

self.ui.userName.setText("当前用户为:" + userName) # 设置Label显示内容

案例如下:

1.生成json数据如下:

import jsonstrData = {'status':200,'message':'获取信息成功!','data':{'userInfo':{'name':"麦嘟小布丁",'sex':'女'},'meetInfo':[{'id': 110,'name': '人工智能技术会议','meet_date': '2019-01-08','meet_time': '16:30:00','meet_address': '会议室A'},{'id': 221,'name': '学习交流会','meet_date': '2018-12-19','meet_time': '14:30:00','meet_address': '会议室B'},{'id': 226,'name': '神经网络知识分享会','meet_date': '2018-12-19','meet_time': '09:00:00','meet_address': '会议室C'}]}
}#定义接口,用来获取json数据
def getMydata():return json.dumps(strData)if __name__ == "__main__":# json.dumps()函数是将字典转化为字符串 jsonStr = json.dumps(strData)#print(jsonStr)# json.loads()函数是将字符串转化为字典res = json.loads(jsonStr)print(type(res),res)

2.Qt designer完成界面设计meetList.ui

为“添加”按钮添加信号和自定义槽函数。

编译meetList.ui为Ui_meetList.py

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'c:\Users\lenovo\Desktop\解析Json\meetList.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(559, 473)MainWindow.setStyleSheet("#MainWindow{background-color: rgb(170, 170, 255);}\n""")self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)self.tableWidget.setGeometry(QtCore.QRect(30, 60, 491, 211))self.tableWidget.setObjectName("tableWidget")self.tableWidget.setColumnCount(5)self.tableWidget.setRowCount(0)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)font = QtGui.QFont()font.setBold(True)font.setWeight(75)item.setFont(font)self.tableWidget.setHorizontalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)font = QtGui.QFont()font.setBold(True)font.setWeight(75)item.setFont(font)self.tableWidget.setHorizontalHeaderItem(1, item)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)font = QtGui.QFont()font.setBold(True)font.setWeight(75)item.setFont(font)self.tableWidget.setHorizontalHeaderItem(2, item)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)font = QtGui.QFont()font.setBold(True)font.setWeight(75)item.setFont(font)self.tableWidget.setHorizontalHeaderItem(3, item)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)font = QtGui.QFont()font.setBold(True)font.setWeight(75)item.setFont(font)self.tableWidget.setHorizontalHeaderItem(4, item)self.userName = QtWidgets.QLabel(self.centralwidget)self.userName.setGeometry(QtCore.QRect(400, 30, 141, 20))self.userName.setObjectName("userName")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(30, 20, 431, 20))font = QtGui.QFont()font.setFamily("微软雅黑")font.setPointSize(14)font.setBold(True)font.setWeight(75)self.label_2.setFont(font)self.label_2.setObjectName("label_2")self.label_3 = QtWidgets.QLabel(self.centralwidget)self.label_3.setGeometry(QtCore.QRect(50, 300, 181, 16))font = QtGui.QFont()font.setPointSize(12)font.setBold(True)font.setWeight(75)self.label_3.setFont(font)self.label_3.setObjectName("label_3")self.label_4 = QtWidgets.QLabel(self.centralwidget)self.label_4.setGeometry(QtCore.QRect(60, 340, 91, 16))font = QtGui.QFont()font.setPointSize(11)self.label_4.setFont(font)self.label_4.setObjectName("label_4")self.label_5 = QtWidgets.QLabel(self.centralwidget)self.label_5.setGeometry(QtCore.QRect(280, 340, 101, 16))font = QtGui.QFont()font.setPointSize(11)self.label_5.setFont(font)self.label_5.setObjectName("label_5")self.label_6 = QtWidgets.QLabel(self.centralwidget)self.label_6.setGeometry(QtCore.QRect(45, 379, 91, 16))font = QtGui.QFont()font.setPointSize(11)self.label_6.setFont(font)self.label_6.setObjectName("label_6")self.label_7 = QtWidgets.QLabel(self.centralwidget)self.label_7.setGeometry(QtCore.QRect(280, 380, 71, 16))font = QtGui.QFont()font.setPointSize(11)self.label_7.setFont(font)self.label_7.setObjectName("label_7")self.addMeetBtn = QtWidgets.QPushButton(self.centralwidget)self.addMeetBtn.setGeometry(QtCore.QRect(450, 300, 75, 23))self.addMeetBtn.setObjectName("addMeetBtn")self.meetId = QtWidgets.QLineEdit(self.centralwidget)self.meetId.setGeometry(QtCore.QRect(120, 340, 151, 20))self.meetId.setObjectName("meetId")self.meetTitle = QtWidgets.QLineEdit(self.centralwidget)self.meetTitle.setGeometry(QtCore.QRect(360, 340, 171, 20))self.meetTitle.setObjectName("meetTitle")self.meetTime = QtWidgets.QLineEdit(self.centralwidget)self.meetTime.setGeometry(QtCore.QRect(120, 380, 151, 20))self.meetTime.setObjectName("meetTime")self.meetAddress = QtWidgets.QLineEdit(self.centralwidget)self.meetAddress.setGeometry(QtCore.QRect(360, 380, 171, 20))self.meetAddress.setObjectName("meetAddress")MainWindow.setCentralWidget(self.centralwidget)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)self.addMeetBtn.clicked.connect(MainWindow.addMeetBtn_clicked)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))item = self.tableWidget.horizontalHeaderItem(0)item.setText(_translate("MainWindow", "会议id"))item = self.tableWidget.horizontalHeaderItem(1)item.setText(_translate("MainWindow", "会议名称"))item = self.tableWidget.horizontalHeaderItem(2)item.setText(_translate("MainWindow", "会议时间"))item = self.tableWidget.horizontalHeaderItem(3)item.setText(_translate("MainWindow", "会议地点"))item = self.tableWidget.horizontalHeaderItem(4)item.setText(_translate("MainWindow", "备注"))self.userName.setText(_translate("MainWindow", "当前用户为:张三"))self.label_2.setText(_translate("MainWindow", "会议列表信息"))self.label_3.setText(_translate("MainWindow", "新增会议信息"))self.label_4.setText(_translate("MainWindow", "会议id:"))self.label_5.setText(_translate("MainWindow", "会议名称:"))self.label_6.setText(_translate("MainWindow", "会议时间:"))self.label_7.setText(_translate("MainWindow", "会议地点:"))self.addMeetBtn.setText(_translate("MainWindow", "添加"))

3.解析json,将内容显示在tableWidget中 ------ def loadMeetInfo(self)

定义addMeetBtn_clicked()函数,获取LineEdit内容并将内容显示在tableWidget中,每点击添加按钮一次,往当前行的下一行插入数据。

from meetInfo import getMydata
from Ui_meetList import Ui_MainWindow
from PyQt5.QtWidgets import *
import sys
import json
from PyQt5.QtCore import *class MainWin(QMainWindow):def __init__(self):super(MainWin, self).__init__()print("mainwin is called!")self.ui = Ui_MainWindow()self.ui.setupUi(self)self.ui.tableWidget.setColumnCount(5)  # 设置表格的列数# self.ui.tableWidget.setRowCount(100)           #设置表格的行数self.loadMeetInfo()print(f"current rows:{self.ui.tableWidget.currentRow()}")def loadMeetInfo(self):data = getMydata()# 获取信息列表meetData = json.loads(data)['data']# 获取用户信息userInfo = meetData['userInfo']userName = userInfo['name']self.ui.userName.setText("当前用户为:" + userName)# 获取会议详情meetInfo = meetData['meetInfo']# index=0for i, item in enumerate(meetInfo):# index+=1# str(item['id'])将整型转换为字符串self.ui.tableWidget.setRowCount(self.ui.tableWidget.rowCount() + 1)print(self.ui.tableWidget.rowCount())mId = QTableWidgetItem(str(item['id']))mId.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中mId.setFlags(Qt.ItemIsEnabled)  # 设置表格不可编辑模式self.ui.tableWidget.setItem(self.ui.tableWidget.rowCount() - 1, 0, mId)mTitle = QTableWidgetItem(item['name'])mTitle.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中mTitle.setFlags(Qt.ItemIsEnabled)  # 设置表格不可编辑模式self.ui.tableWidget.setItem(self.ui.tableWidget.rowCount() - 1, 1, mTitle)mTime = QTableWidgetItem(item['meet_time'])mTime.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中mTime.setFlags(Qt.ItemIsEnabled)  # 设置表格不可编辑模式self.ui.tableWidget.setItem(self.ui.tableWidget.rowCount() - 1, 2, mTime)mAddress = QTableWidgetItem(item['meet_address'])mAddress.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中mAddress.setFlags(Qt.ItemIsEnabled)  # 设置表格不可编辑模式self.ui.tableWidget.setItem(self.ui.tableWidget.rowCount() - 1, 3, mAddress)# return indexdef addMeetBtn_clicked(self):i = self.ui.tableWidget.rowCount()i += 1self.ui.tableWidget.setRowCount(i)meetId = self.ui.meetId.text()# print(type(meetId))mId = QTableWidgetItem(meetId)mId.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中self.ui.tableWidget.setItem(i - 1, 0, mId)meetTitle = self.ui.meetTitle.text()mTitle = QTableWidgetItem(meetTitle)mTitle.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中self.ui.tableWidget.setItem(i - 1, 1, mTitle)meetTime = self.ui.meetTime.text()mTime = QTableWidgetItem(meetTime)mTime.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中self.ui.tableWidget.setItem(i - 1, 2, mTime)meetAddress = self.ui.meetAddress.text()mAddress = QTableWidgetItem(meetAddress)mAddress.setTextAlignment(Qt.AlignCenter)  # 设置文字显示居中self.ui.tableWidget.setItem(i - 1, 3, mAddress)# LineEdit内容清除self.ui.meetId.setText("")self.ui.meetTitle.setText("")self.ui.meetTime.setText("")self.ui.meetAddress.setText("")if __name__ == "__main__":app = QApplication(sys.argv)main = MainWin()# 显示主界面main.show()sys.exit(app.exec_())

4.结果展示

前3条会议信息为从解析json获得,第4条会议信息为通过新增会议信息添加。

     

这篇关于Pyqt5--解析json并将内容显示在tableWidget的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/412224

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [