2013-05-25 37 views
0

我正在使用Python 3和Qt5。 我设计了一个超过700个QLabels的QWidget。我需要改变他们,但我想这样做,而不必写超过700行来设置我的所有标签的文本。 我也需要显示和隐藏他们的意愿。更改许多QLabel的QLabel文本

如果我有一个变量名称的字符串,我可以将它们分组或编辑一个变量吗? 我正在寻找类似Matlab'assignin'函数的东西。

标签被命名为label_A - label_Z和label_AA - label_ZZ

从主类 进口ezodf

self.ui = AnalysisGui.Ui_Form() 
self.ui.setupUi(self) 

self.Alphabet = ["a", "b", "c", "d", "e", 
       "f", "g", "h", "i", "j", 
       "k", "l", "m", "n", "o", 
       "p", "q", "r", "s", "t", 
       "u", "v", "w", "x", "y", "z"] 

for Alpha in self.Alphabet: 
    self.ui.findChild(QtGui.QLabel, "label_"+Alpha.upper()).SetText(Alpha.upper()+" ") 
    for Beta in self.Alphabet: 
     self.ui.findChild(QtGui.QLabel, "label_"+Alpha.upper()+Beta.upper()).SetText(Alpha.upper()+Beta.upper()+" ") 

这是说明如何将标签定义AnalysisGui类

self.label_A = QtGui.QLabel(Form) 
self.label_A.setStyleSheet(_fromUtf8("color: rgb(0, 0, 0);\n""font: 8pt \"Calibri\";\n""background-image: url(:/Thoth/SeeThrough.png);")) 
self.label_A.setObjectName(_fromUtf8("label_A")) 
self.gridLayout.addWidget(self.label_A, 1, 0, 1, 1) 
self.label_B = QtGui.QLabel(Form) 
self.label_B.setStyleSheet(_fromUtf8("color: rgb(0, 0, 0);\n""font: 8pt \"Calibri\";\n""background-image: url(:/Thoth/SeeThrough.png);")) 
self.label_B.setObjectName(_fromUtf8("label_B")) 
self.gridLayout.addWidget(self.label_B, 1, 1, 1, 1) 
self.label_C = QtGui.QLabel(Form) 
self.label_C.setStyleSheet(_fromUtf8("color: rgb(0, 0, 0);\n""font: 8pt \"Calibri\";\n""background-image: url(:/Thoth/SeeThrough.png);")) 
self.label_C.setObjectName(_fromUtf8("label_C")) 
self.gridLayout.addWidget(self.label_C, 1, 2, 1, 1) 

感谢您的帮助。

+0

你能否提供更多细节?你对标签的命名方案是什么?他们是在一个家长控制下还是在一个复杂的结构中? –

+0

我已经添加了上面的命名结构。我没有明确地使用父控制来创建它们,但是如果这是pyqt4中的默认值,那么就是这样。 – Lex

+0

但您是如何创建标签的? –

回答

0

你可以尝试使用QWidget.findChild

import sys 
from PyQt4.QtGui import * 
try: 
    from PyQt4.QtWidgets import * 
except ImportError: 
    pass 


app = QApplication(sys.argv) 

window = QWidget() 
layout = QVBoxLayout() 

for i in range(26): 
    title = chr(ord('A')+i) 
    label = QLabel(title, window) 
    label.setObjectName("label_"+title) 
    layout.addWidget(label) 

window.findChild(QLabel, "label_F").setText("test") 

window.setLayout(layout) 
window.show() 

app.exec_() 
+0

我不知道我是否做错了什么,但它不适合我。我得到: AttributeError:'Ui_Form'对象没有属性'findChild' ,在行: self.ui.findChild(QtGui.QLabel,“label _”+ Alpha.upper())。SetText(Alpha.upper )+“”) – Lex

+0

@Lex也许你可以使用'getattr(self.ui,“label _”+ Alpha.upper())。setText(Alpha.upper()+“”)'...我会研究明天你的问题会更加深刻,现在我知道你使用了'ui'的东西。 –