从字典更新多个标签

2024-10-02 10:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

词典更改时如何链接/更新标签?你知道吗

当按下按钮时,它生成随机值并将其存储到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_())

Tags: importselfinitdefsys标签mydictscroll
1条回答
网友
1楼 · 发布于 2024-10-02 10:32:19

我将把布局(在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']))

要用第一个值初始化标签,只需在__init__末尾调用self.changeValues()

相关问题 更多 >

    热门问题