python - 在 PYQT4 中创建和更新多个 QLabel
问题描述
如何在循环中的小部件内创建多个(例如 56 个)标签?
假设我有一个名为 column 的列表:
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 函数单击复选按钮,所有空白 Qlabes 将同时更新。
用户界面的简要视图
我知道这种方法不正确,因为我不应该将字符串用作变量名,而且我在更新 infor_labels(空白标签)时遇到问题,因为我实际上无法调用它们。
任何人都可以请提供建议吗?如果上述描述混淆,将给出额外的解释或信息。
解决方案
您可以使用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_())
推荐阅读
- flutter - 在 Flutter 中使用 GestureDetector 和 Button 可访问性有什么区别吗?
- javascript - 无法获取表单输入的值
- python - Django 与 html 的交互
- php - 用于plpgsql函数的php
- angular - 如何在角度模板中将对象的属性打印为 html?
- java - set.Visibility(View.GONE) 没有使 Button 和 EditText 消失,它的出现就像我什至没有添加代码一样
- javascript - 发送 html 输入值
- javascript - 如何递归地将函数传递给对象的每个属性
- google-apps-script - 如何提高我的 Google 脚本代码的性能以避免超时错误
- windows - AD 用户和组