我想从字典(或列表或变量)动态更新和创建标签。
如何在字典更改时链接/更新标签?
按下按钮时,它会生成随机值并将其存储到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_())
答案 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__
即可