2017-11-18 2 views
0

Wenn ich den folgenden Code ausführe, zeigt es das unten an. Warum wird x 'x' nicht zu einem booleschen Wert? Dies geschieht nur mit dem ersten Argument, das in die mit Lambda aufgerufene Funktion übergeben wird.PyQt5-Schaltfläche Lambda-Variable wird Boolean

falsch y /home/me/model/irgendeine_Datei

from PyQt5.QtWidgets import QPushButton 
modelpath = '/home/me/model' 
filelist = os.listdir(modelpath) 
x = 'x' 
y = 'y' 
def HelloWidget(QWidget): 
    def __init__(self): 
     for file in filelist: 
      button = QPushButton(file) 
      button.clicked.connect(lambda x=x,y=y,file=file: self.myfunction(x,y,file) 

    def myfunction(self,x,y,file): 
     print(x) 
     print(y) 
     print(file) 
+0

Testen Sie meine Antwort, und wenn es funktioniert, vergessen Sie nicht, es als richtig zu markieren, wenn Sie nicht wissen, wie es geht, überprüfen Sie Folgendes Link: https://StackOverflow.com/Tour – eyllanesc

Antwort

0

Das Problem verursacht, weil clicked einen Booleschen Wert übergibt der angibt, ob es geprüft worden ist oder nicht. Die geeignete Sache ist, einen Parameter zu verwenden, um dieses Argument zu verwenden:

button.clicked.connect(lambda checked, x=x,y=y,file=file: self.myfunction(x,y,file)) 
+0

Ich nehme an, es ist richtig. Ich habe die Antwort auch hier gefunden. https://stackoverflow.com/questions/18836291/lambda-function-returning-false. Danke für deine schnelle Antwort! – user1657862

Verwandte Themen