如何在pyside2窗口中显示Python字典数据? [处于保留状态]

问题描述 投票:1回答:1

我有一个用python编写的字典列表,我想以图像中显示的方式在python pyside2窗口中显示那些字典数据。

link of image

这些是具有多个键和值的三个字典,下面是示例字典

data = {
    "start time": ["2001-04-27t03:20:15-07:00","2001-04-27T12:20:15+02:00",
    "2001-04-27T10:20:15Z"],
    "Approximate datasets size in the file system" : ["6.940 MB","11 datasets"],
    "Datatypes" : ["APS", "Order APS","Slow Quantity", "Tacho Edges" , "Throughput"],
    "Quantities" : ["Rotational Speed" , "Sound Pressure"]   }

存在一个包含1000个此类词典的列表,而我的问题是如何以QT pyside2中显示它们的方式,如所附图像所示。

python python-3.x pyside2
1个回答
0
投票

它可能看起来像这样:

import sys
from PyQt5 import QtWidgets, QtCore

class MyWindow(QtWidgets.QMainWindow): 
    def __init__(self, data):
        super().__init__()

        self.data = data

        self.scrollArea = QtWidgets.QScrollArea()
        self.scrollArea.setWidgetResizable(True)
        self.setCentralWidget(self.scrollArea)
        self.widget = QtWidgets.QWidget()             
        self.scrollArea.setWidget(self.widget)         

        button = QtWidgets.QPushButton("Click me")        
        button.clicked.connect(self.onButton)

        self.grid = QtWidgets.QGridLayout(self.widget)
        self.grid.addWidget(button) 

    def onButton(self):
        i = 1
        for item in self.data:
            textLeft = f'''
Start time:  
{item["start time"][0]} 
America/Los_Angeles
{item["start time"][1]} Original 
{item["start time"][2]} UTC

Approximate datasets size in the file system:   
{item["Approximate datasets size in the file system"][0]}      
            '''

            textRight = f'''
{item["Approximate datasets size in the file system"][1]}      
Datatypes:
{' '.join(item["Datatypes"][:3])}
{' '.join(item["Datatypes"][3:])}

Quantities:
{' '.join(item["Quantities"])}
            '''

            labelLeft = QtWidgets.QLabel()
            labelLeft.setText(textLeft)
            self.grid.addWidget(labelLeft, i, 0)

            labelRight = QtWidgets.QLabel()
            labelRight.setText(textRight)
            self.grid.addWidget(labelRight, i, 1)            

            line = QtWidgets.QFrame()
            line.setFrameShape(QtWidgets.QFrame.HLine)
            self.grid.addWidget(line, i+1, 0, 1, 2)
            i += 2


data = [
    {"start time": ["2001-04-27t03:20:15-07:00", "2001-04-27T12:20:15+02:00", "2001-04-27T10:20:15Z"],
    "Approximate datasets size in the file system" : ["6.940 MB","11 datasets"],
    "Datatypes" : ["APS", "Order APS","Slow Quantity", "Tacho Edges" , "Throughput"],
    "Quantities" : ["Rotational Speed" , "Sound Pressure"]},

    {"start time": ["2222-07:00", "2222:15+02:00", "2222:15Z"],
    "Approximate datasets size in the file system" : ["2.22 MB","11 datasets"],
    "Datatypes" : ["APS", "Order APS","Slow Quantity", "Tacho Edges" , "Throughput"],
    "Quantities" : ["Rotational Speed" , "Sound Pressure"]},

    {"start time": ["333-07:00", "333:15+02:00", "333:15Z"],
    "Approximate datasets size in the file system" : ["333 MB","11 datasets"],
    "Datatypes" : ["APS", "Order APS","Slow Quantity", "Tacho Edges" , "Throughput"],
    "Quantities" : ["Rotational Speed" , "Sound Pressure"] },
]  

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myWindow = MyWindow(data)
    myWindow.resize(500, 300)
    myWindow.show()
    app.exec_() 

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.