python显示数据控件_Json数据显示到界面上,用哪个控件?Python用PyQt5进行界面设计...

前面内容,我们介绍了PyQt5中一个很常用的高级控件类—QTreeWidget类。

树状结构

Python界面如何漂亮的展示树形结构,PyQt5控件之QTreeWidget详解

本篇内容我们不讲知识点,只讲这个控件的应用。

01问题的提出

我们通过一个例子来梳理一下如何使用这个控件类。

经常关注我的小伙伴一定会看过前面有一篇内容,讲解关于三级联动列表栏的制作过程。(感兴趣的小伙伴可以看一下这篇文章Python用PyQt5设计省市县三级联动的下拉选框,QComboBox使用详解)

这篇文章中我们使用QComboBox控件制作了一个三级联动的下拉选框。

三级联动下拉选框

上面的三级联动下拉选框我们是利用了一个json文件来获取数据的,json文件结构如下所示:

界面数据源

现在,我们的需求有变化了,如果我不仅需要知道各个省份包含哪些市、州,各个市、州包含哪些县、区,我还需要知道各个省、市(州)、县(区)的编码(别问我编码是什么?看你的身份证前六位),我想把这些信息在一个PyQt5控件中全部显示出来。这个问题该如何解决呢?

02如何解决呢?

对于上面的需求,说白了,就是实现下面的功能!

程序要实现的效果展示

这样的效果如何实现呢?

很显然,它利用了我们之前讲到的QTreeWidget控件。我们需要的数据来自一个json文件,因此我们还需要一个解析json的模块。

json模块解析数据

本例的关键其实是:如何将解析出来的json文件中的有效数据,添加到QTreeWidget控件中显示的问题。

显示问题

对于QTreeWidget控件的创建过程,我们前一篇内容已经介绍了,感兴趣的读者可以参考下(参见文首链接)。

03QTreeWidget控件创建过程

QTreeWidget的创建,菜鸟们可以试试这个思路:

梳理下思路

项目内容准备(json数据、列表、字典、等等复杂的树形结构都可以);创建一个QTreeWidget类的实例(初始化时就设置好相关属性);利用类的实例方法,通过遍历循环添加我们之前准备好的项目内容(这就看具体需求了)。

04解决问题

上面解题思路已经很清楚了,废话不多数,我们直接上代码吧!

程序源代码

我们来看下问题解决了没?

00:15

好的,完美解决问题!

想要源码和涉及json文件的小伙伴关注私信“qtreewidget案例”获取,喜欢Python编程的小伙伴关注我,后续推出更加精彩的内容。

本文作者原创,未经作者同意,严禁转载!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取CSV文件: ```python import csv # 打开CSV文件 with open('data.csv', newline='') as csvfile: reader = csv.reader(csvfile) # 遍历CSV文件中的每一行 for row in reader: print(', '.join(row)) ``` 读取JSON文件: ```python import json # 打开JSON文件 with open('data.json') as jsonfile: data = json.load(jsonfile) # 遍历JSON文件中的每个对象 for obj in data: print(obj) ``` 读取XML文件: ```python import xml.etree.ElementTree as ET # 打开XML文件 tree = ET.parse('data.xml') root = tree.getroot() # 遍历XML文件中的每个元素 for child in root: print(child.tag, child.attrib) ``` 读取Avro文件: ```python import avro.schema from avro.datafile import DataFileReader from avro.io import DatumReader # 打开Avro文件 schema = avro.schema.parse(open("data.avsc").read()) reader = DataFileReader(open("data.avro", "rb"), DatumReader()) # 遍历Avro文件中的每条记录 for record in reader: print(record) reader.close() ``` 在PyQt5设计页面显示CSV文件数据: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem import csv class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('CSV Viewer') self.setGeometry(200, 200, 800, 600) # 创建表格件 table = QTableWidget(self) table.setGeometry(10, 10, 780, 580) # 打开CSV文件 with open('data.csv', newline='') as csvfile: reader = csv.reader(csvfile) # 遍历CSV文件中的每一行 for i, row in enumerate(reader): # 设置表格行数 table.setRowCount(i + 1) # 设置表格列数 table.setColumnCount(len(row)) # 设置表格内容 for j, value in enumerate(row): item = QTableWidgetItem(value) table.setItem(i, j, item) self.show() if __name__ == '__main__': app = QApplication(sys.argv) win = MainWindow() sys.exit(app.exec_()) ``` 在PyQt5设计页面显示JSON文件数据: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem import json class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('JSON Viewer') self.setGeometry(200, 200, 800, 600) # 创建表格件 table = QTableWidget(self) table.setGeometry(10, 10, 780, 580) # 打开JSON文件 with open('data.json') as jsonfile: data = json.load(jsonfile) # 遍历JSON文件中的每个对象 for i, obj in enumerate(data): # 设置表格行数 table.setRowCount(i + 1) # 设置表格列数 table.setColumnCount(len(obj)) # 设置表格内容 for j, key in enumerate(obj.keys()): # 设置表格列标题 if i == 0: table.setHorizontalHeaderItem(j, QTableWidgetItem(key)) item = QTableWidgetItem(str(obj[key])) table.setItem(i, j, item) self.show() if __name__ == '__main__': app = QApplication(sys.argv) win = MainWindow() sys.exit(app.exec_()) ``` 在PyQt5设计页面显示XML文件数据: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem import xml.etree.ElementTree as ET class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('XML Viewer') self.setGeometry(200, 200, 800, 600) # 创建树形件 tree = QTreeWidget(self) tree.setHeaderLabels(['Tag', 'Text', 'Attributes']) tree.setGeometry(10, 10, 780, 580) # 打开XML文件 tree.clear() tree.setColumnCount(3) # 设置根节点 tree.header().setVisible(True) tree.header().setStretchLastSection(True) tree.setColumnWidth(0, 200) tree.setColumnWidth(1, 400) tree.setColumnWidth(2, 200) tree.setIndentation(20) tree.setAnimated(True) tree.setUniformRowHeights(True) tree.setAutoScroll(True) tree_root = QTreeWidgetItem(tree, ['root', '', '']) tree.addTopLevelItem(tree_root) tree_stack = [(root, tree_root)] while tree_stack: xml_elem, tree_elem = tree_stack.pop() # 设置元素标签 elem_name = xml_elem.tag elem_text = xml_elem.text.strip() if xml_elem.text else '' elem_attrs = ' '.join([f'{k}="{v}"' for k, v in xml_elem.items()]) tree_elem.setText(0, elem_name) tree_elem.setText(1, elem_text) tree_elem.setText(2, elem_attrs) # 遍历子元素 for child in xml_elem: child_elem = QTreeWidgetItem(tree_elem) tree_elem.addChild(child_elem) tree_stack.append((child, child_elem)) tree.expandToDepth(1) tree.resizeColumnToContents(0) self.show() if __name__ == '__main__': app = QApplication(sys.argv) win = MainWindow() sys.exit(app.exec_()) ``` 在PyQt5设计页面显示Avro文件数据: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem import avro.schema from avro.datafile import DataFileReader from avro.io import DatumReader class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('Avro Viewer') self.setGeometry(200, 200, 800, 600) # 创建表格件 table = QTableWidget(self) table.setGeometry(10, 10, 780, 580) # 打开Avro文件 schema = avro.schema.parse(open("data.avsc").read()) reader = DataFileReader(open("data.avro", "rb"), DatumReader()) # 设置表格列数 table.setColumnCount(len(schema.fields)) # 设置表格列标题 for i, field in enumerate(schema.fields): table.setHorizontalHeaderItem(i, QTableWidgetItem(field.name)) # 遍历Avro文件中的每条记录 for i, record in enumerate(reader): # 设置表格行数 table.setRowCount(i + 1) # 设置表格内容 for j, field in enumerate(schema.fields): item = QTableWidgetItem(str(record[field.name])) table.setItem(i, j, item) reader.close() self.show() if __name__ == '__main__': app = QApplication(sys.argv) win = MainWindow() sys.exit(app.exec_()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值