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

Posted

技术标签:

【中文标题】for 循环是不是只在 python 类中运行一次?【英文标题】:Does the for-loop only run one time in python class?for 循环是否只在 python 类中运行一次? 【发布时间】:2017-10-05 10:54:04 【问题描述】:

我想在一个窗口中显示十行'test'标签,所以我使用了for循环,但它只显示一行。 我猜我代码中的 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()

【问题讨论】:

【参考方案1】:

这个

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 循环中(第 2 行...第 3 行)

【讨论】:

【参考方案2】:

问题是您只创建了一个班级内已知的标签。任何 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 中进行迭代并逐个修改它们。 您可以做的另一件事是创建一个列表,您可以在其中附加每个标签,以便以后轻松访问它们。

【讨论】:

以上是关于for 循环是不是只在 python 类中运行一次?的主要内容,如果未能解决你的问题,请参考以下文章

python中为啥我的for循环里嵌套的if只能循环一次?

python循环

Python:只执行一次for循环(不是第一次而是第二次)? [复制]

在 python for 循环中一次运行 3 个变量。

在Python类中使用for循环更新列表

Python for 循环在第一次迭代后停止