Промяна на текста на QLabel за много QLabel

Използвам Python 3 и Qt5. Проектирах QWidget с малко над 700 QLabels. Трябва да ги променя, но бих искал да го направя, без да се налага да пиша над 700 реда, за да задам текста за всичките си етикети. Също така трябва да ги показвам и скривам по желание.

Има ли начин да ги групирам или да редактирам променлива, ако имам низ от името на тази променлива? Търся нещо като функцията "assignin" на Matlab.

Етикетите се наричат ​​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)

Благодаря за вашата помощ.


person Lex    schedule 25.05.2013    source източник
comment
Можете ли да предоставите повече подробности? Каква е вашата схема за именуване на етикетите? Всички ли са под контрола на един родител или в някаква сложна структура?   -  person Oleh Prypin    schedule 25.05.2013
comment
Добавих структурата за именуване по-горе. Не съм ги създал изрично с родителски контрол, но ако това е по подразбиране в pyqt4, тогава има.   -  person Lex    schedule 26.05.2013
comment
Но как създадохте етикетите?   -  person Oleh Prypin    schedule 26.05.2013
comment
Създадох ги в Qt Designer... Отне ми малко време.   -  person Lex    schedule 26.05.2013
comment
как се скрива и показва QLabel на едно и също място в мрежата?   -  person Ejaz    schedule 27.07.2014


Отговори (1)


Можете да опитате да използвате 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_()
person Oleh Prypin    schedule 25.05.2013
comment
Не знам дали направих нещо грешно, но не ми се получи. Получавам: AttributeError: 'Ui_Form' object has no attribute 'findChild', at the line: self.ui.findChild(QtGui.QLabel, label_+Alpha.upper()).SetText(Alpha.upper()+ ) - person Lex; 31.05.2013
comment
@Lex Може би можеш просто да използваш getattr(self.ui, "label_"+Alpha.upper()).setText(Alpha.upper()+" ")... Ще разгледам проблема ти по-задълбочено утре, след като знам, че използваш това нещо ui. - person Oleh Prypin; 31.05.2013