如何在一个小部件中循环创建多个(例如56个)标签?
说我有一个名为列的列表:
column = ['a','b','c','d',.......'y','z']
我所做的是:
class ApplicationWindow_1(QWidget):
def __init__(self,parent = None):
super(ApplicationWindow_1,self).__init__(parent)
self.resize(400,900)
for i in range(len(column)):
column_name = str(column[i]) + '_label_name'
self.column_name = QLabel(column[i],self)
self.column_name.resize(120,30)
self.column_name.move(30,100+(i-1)*20)
infor_name = str(column[i]) + '_label_infor'
self.infor_name = QLabel(self)
self.infor_name.resize(120,30)
self.infor_name.move(230,100+(i-1)*20)
对于列表中的每个元素,将有一个对应的空白QLabel。通过使用setText函数单击复选按钮,可以同时更新所有空白的Qlab。
UI的简要视图
我知道此方法不合适,因为我不应该使用字符串作为变量名,并且由于无法实际调用它们,更新infor_labels(空白标签)时遇到问题。
任何人都可以提供建议吗?如果以上描述混淆,将给出其他解释或信息。
答案 0 :(得分:0)
您可以使用setattr()
通过如下所示的字符串动态创建变量:
from PyQt4 import QtCore, QtGui
class ApplicationWindow_1(QtGui.QWidget):
def __init__(self,parent = None):
super(ApplicationWindow_1,self).__init__(parent)
flay = QtGui.QFormLayout(self)
texts = ["name", "address", "phone"]
for text in texts:
label_1 = QtGui.QLabel(text+": ")
label_1.setFixedSize(120, 30)
label_2 = QtGui.QLabel()
label_2.setFixedSize(120, 30)
flay.addRow(label_1, label_2)
# An attribute of the class is created with setattr()
setattr(self, "{}_infor_label".format(text), label_2)
# use
self.name_infor_label.setText("some name")
self.address_infor_label.setText("some address")
self.phone_infor_label.setText("some phone")
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
w = ApplicationWindow_1()
w.show()
sys.exit(app.exec_())