从字典更新多个标签

时间:2018-01-10 13:56:41

标签: python python-3.x pyqt5

我想从字典(或列表或变量)动态更新和创建标签。

如何在字典更改时链接/更新标签?

按下按钮时,它会生成随机值并将其存储到dict中。这些值用于在init函数中创建标签。 按下按钮时如何使这些值保持最新?

import sys, random
from PyQt5 import QtWidgets
from PyQt5.QtCore import *

class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.updt = QtWidgets.QPushButton( 'Update' )
        mygroupbox = QtWidgets.QGroupBox('')
        myform = QtWidgets.QFormLayout()

        myDict = createValues.randomValues()
        for i, item in myDict.items():
            self.label = QtWidgets.QLabel( str( item['value'] ) )
            myform.addRow(self.label)
        mygroupbox.setLayout(myform)
        scroll = QtWidgets.QScrollArea()
        scroll.setWidget(mygroupbox)
        scroll.setWidgetResizable(True)
        scroll.setFixedHeight(400)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.updt)
        layout.addWidget(scroll)

        self.updt.clicked.connect(lambda: self.changeValues() )

        self.show()

    def changeValues(self):
        self.myDict = createValues.randomValues()

class createValues():
    def randomValues():
        items = ['item1','item2','item3','item4']
        myData = {}

        for i in items:
            myData[i] = {}
            myData[i]['name'] = i
            myData[i]['value'] = random.uniform(0, 10)

        print(myData)
        return myData


app = QtWidgets.QApplication(sys.argv)
a_window = Window()
a_window.setGeometry(500, 300, 300, 400)
sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

我会将布局(在init_ui中创建标签)与"分隔标签随机值"逻辑。

init_ui中,我们可以创建定义数量的QLabel,并在列表中跟踪它们。类似的东西:

self.updt = QtWidgets.QPushButton('Update')
self.updt.clicked.connect(self.changeValues)  # no need for lamba

myform = QtWidgets.QFormLayout()
self.mylabels = []
for i in range(4):  # or better, define a constant like "NB_VALUES = 4" and use it
    label = QtWidgets.QLabel()
    myform.addRow(label)
    self.mylabels.append(label)
...

change_values中,我们可以将所有逻辑用随机值填充标签

def changeValues(self):
    self.myDict = randomValues()
    for item, label in zip(self.myDict.values(), self.mylabels):
        label.setText(str(item['value']))

要使用第一个值初始化标签,您只需在self.changeValues()

结尾处拨打__init__即可