Slots mit Lambda-Funktionen in PyQt verbinden
Beim Versuch, Slots mit Lambda-Funktionen zu verbinden, ist es wichtig zu verstehen, wie Argumente gehandhabt werden. Im bereitgestellten Codebeispiel tritt das Problem auf, wenn mehrere Schaltflächen in einer Schleife verbunden werden.
In den ersten beiden Schaltflächen sind die Lambda-Ausdrücke korrekt definiert und verbunden:
button_1.clicked.connect(lambda x:self.button_pushed(1)) button_2.clicked.connect(lambda x:self.button_pushed(2))
Für die Schaltflächen Innerhalb der Schleife verbunden, liegt das Problem im Lambda-Ausdruck:
button.clicked.connect(lambda x=idx: self.button_pushed(x))
In diesem Fall gibt das Signal QPushButton.clicked ein Argument aus, das den Zustand des angibt Taste. Beim Herstellen einer Verbindung zum Lambda-Slot wird jedoch das optionale Argument idx durch den Status der Schaltfläche überschrieben.
Um dieses Problem zu beheben, sollte die Verbindung wie folgt definiert werden:
button.clicked.connect(lambda state, x=idx: self.button_pushed(x))
Dadurch wird ignoriert button state und übergibt den korrekten Wert an die button_pushed-Methode.
Zusammenfassend ist es wichtig, beim Herstellen einer Verbindung auf die Argumente zu achten, die an Lambda-Funktionen übergeben werden Slots. Durch die ordnungsgemäße Handhabung der Argumente des ausgegebenen Signals können Sie sicherstellen, dass die richtigen Werte an Ihre Methoden übergeben werden.
Das obige ist der detaillierte Inhalt vonWie verbinde ich Slots richtig mit Lambda-Funktionen in PyQt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!