for循环只在python类中运行一次吗?

时间:2017-10-05 10:54:04

标签: python-3.5 pyqt5

我想在一个窗口中显示十行'test'标签,所以我使用for-loop,但它只显示一行。
 我想我的代码中的for循环放错了地方,但我不知道如何使它正确。

这是主要代码:

class Home(QMainWindow):
    def __init__(self, parent = None):
        super(Home, self).__init__(parent)
        self.setGeometry(300,100,400,300)
        self.scrollLayout = QFormLayout()

        self.scrollWidget = QWidget()
        self.scrollWidget.setLayout(self.scrollLayout)

        self.scrollArea = QScrollArea()
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setWidget(self.scrollWidget)

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.scrollArea)

        self.centralWidget = QWidget()
        self.centralWidget.setLayout(self.mainLayout)
        self.setCentralWidget(self.centralWidget)

        self.Lbl = QLabel('test')
        for i in range(20):### here, it only loops 1 time
            self.scrollLayout.addRow(self.Lbl)

        self.show()

2 个答案:

答案 0 :(得分:0)

1        self.Lbl = QLabel('test')
2        for i in range(20):### here, it only loops 1 time
3            self.scrollLayout.addRow(self.Lbl)

你需要将第1行实际放入for-loop(第2行......第3行)

答案 1 :(得分:0)

问题是您只在类中创建一个已知的标签。任何Widget类型(QLabel)只能添加到任何“容器”一次。所以你要添加相同的标签20次,当你在其他地方添加标签或在同一个地方添加旧标签并将其添加到新地方时,一个标签不能同时在两个地方。

这是事情,你必须为每个循环创建一个新标签,所以你会有类似的东西:

for i in range(20):
    lbl = QLabel("teste"+str(i)) # here you are creating one new label to each loop
    self.scrollLayout.addRow(lbl) 

但请记住,通过这种方式,现在您没有在每个标签的变量中保存实例,以访问您必须在scrollLayout中迭代的每个实例,并逐个修改它们。 您可以做的另一件事是拥有一个列表,您可以附加每个标签,以后可以轻松访问它们。