Создание и обновление нескольких QLabel в PYQT4 - PullRequest
0 голосов
/ 12 октября 2018

Как я могу создать количество (скажем, 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.Все пустые Qlabes будут обновлены одновременно, нажав кнопку проверки с помощью функции setText.

краткое представление пользовательского интерфейса

Я знаю, что этот метод не подходитпоскольку я не должен использовать строку в качестве имен переменных, и у меня возникла проблема с обновлением infor_labels (пустые метки), поскольку я не могу их вызвать.

Может кто-нибудь, пожалуйста, предоставьте предложения?Дополнительное объяснение или информация будут предоставлены, если приведенное выше описание не соответствует действительности

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете использовать 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_())
...