2017-10-05 5 views
-1

Ich möchte zehn Zeilen 'Test' Label in einem Fenster zeigen, also verwende ich die For-Schleife, aber es zeigt nur eine Zeile.
Ich denke, die For-Schleife in meinem Code ist an der falschen Stelle, aber ich weiß nicht, wie man es richtig macht. HierLäuft die for-Schleife nur einmal in der Python-Klasse?

ist der Hauptcode:

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() 

Antwort

0

diese

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

müssen Sie setzen Linie 1 tatsächlich in der for-Schleife (Zeile 2 ... Zeile 3)

+0

Erstaunlich ... vielen Dank! –

0

Das Problem besteht darin, dass Sie nur ein Label erstellen, das in Ihrer Klasse bekannt ist. Jeder Widget-Typ (QLabel) kann nur einmal zu einem "Container" hinzugefügt werden. Sie fügen also das gleiche Label 20 Mal hinzu, wenn Sie ein Label irgendwo anders oder an der gleichen Stelle hinzufügen, entfernen Sie das alte Label und fügen es an der neuen Stelle hinzu. Ein Label kann nicht an zwei Stellen gleichzeitig sein.


Hier ist das Ding, Sie ein neues Label jede Schleife erstellen, so dass Sie so etwas haben würde:

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

Aber denken Sie daran, Sie jetzt auf diese Weise eine Instanz nicht gespeichert haben Um auf jede Variable zuzugreifen, müssen Sie in Ihrer scrollLayout in einer Variablen jeder Marke einzeln eine davon durchlaufen, um sie zu ändern. Eine andere Sache, die Sie tun können, ist, eine Liste zu haben, die Sie jedes Ihrer Aufkleber anfügen und auf sie später leicht zurückgreifen können.