Ich entwickle derzeit eine Desktop-Anwendung mit PyQt 5 und Python 3.5. In letzter Zeit ist ein Problem beim dynamischen Hinzufügen von Schaltflächen zu einem Layout aufgetreten. Hier ist, was ich tue:Python - Hinzufügen von Schaltflächen zum Layout in PyQt
for i in range(len(movieList)):
movies[i][0] = QtWidgets.QLabel("Title: " + movieList[i][0])
movies[i][0].setGeometry(30, 50, 15, 20)
movies[i][0].setFont(self.movieTitleFont)
self.scrollLayout.addRow(movies[i][0])
#If the lenght is 3 it means it has 2 available resolutions
if len(movieList[i]) == 3:
movies[i][1] = [QtWidgets.QPushButton(movieList[i][1][1], self), QtWidgets.QPushButton(movieList[i][2][1], self)]
movies[i][1][0].clicked.connect(lambda: self.downloadMovie(movieList[i], movieList[i][1][1]))
movies[i][1][0].setGeometry(0, 0, 10, 20)
movies[i][1][1].clicked.connect(lambda: self.downloadMovie(movieList[i], movieList[i][2][1]))
movies[i][1][1].setGeometry(10, 0, 10, 20)
self.scrollLayout.addRow(movies[i][1][0])
self.scrollLayout.addRow(movies[i][1][1])
else:
movies[i][1] = [QtWidgets.QPushButton(movieList[i][1][1], self)]
movies[i][1][0].clicked.connect(lambda: self.downloadMovie(movieList[i], movieList[i][1][1]))
movies[i][1][0].setGeometry(30, 50, 10, 20)
self.scrollLayout.addRow(movies[i][1][0])
Das Problem, das ich habe, ist, dass, wenn alle Filme in meinem Bildschirm geladen werden, und ich versuche, eine der Tasten zu drücken, sagte Film zum Download es wird nur den letzten Wert nehmen „i "gespeichert (in clicked.connect), so wird es versuchen, den zuletzt gezeigten Film herunterzuladen. Ich habe kaum daran gearbeitet, einen Workaround zu finden, aber ich habe den Weg nicht gefunden.
Vielen Dank !! Es hat gut funktioniert! – Guido
Kein Problem und wenn Sie mehr darüber wissen möchten, besuchen Sie diese http://stackoverflow.com/questions/11828410/differences-between-functools-partial-and-a-similar-lambda – Achayan
Großartig! Werde es ausprobieren! Vielen Dank :) – Guido