Warum kann man denn bei Slots keine Funktionsparameter übergeben? Gibt es da irgendwelche Gründe für? Könnte bald ne Prüfungsfrage für mich sein und ich hab irgendwie keine Ahnung

Code: Alles auswählen
import sys
from PyQt4.Qt import *
def sayHello(s="x"):
print s
app = QApplication(sys.argv)
button = QPushButton("Sag Hallo", None)
QObject.connect(button, SIGNAL('clicked()'), sayHello)
button.show()
sys.exit(app.exec_())
Code: Alles auswählen
QObject.connect(button, SIGNAL('clicked()'), sayHello("Hallo"))
Code: Alles auswählen
import sys
from PyQt4.Qt import *
def sayHello(s="x"):
print s
app = QApplication(sys.argv)
button = QPushButton("Sag Hallo", None)
QObject.connect(button, SIGNAL('clicked()'), lambda: sayHello('Hello'))
button.show()
sys.exit(app.exec_())
Nein, bist du nicht. Dir ist nicht mal klar, was ein Funktionsaufruf ist, und was deine Syntax bewirkt hat.pythonesque hat geschrieben:In Python bin ich ja fit
Dein Problem hat nichts mit Qt zu tun, sondern ist in deinem Unverständnis von Funktionsaufrufen begründet.nur QT ist mir fremd, ich steh da irgendwie auf dem schlauch.
lambda erzeugt eine neue, anonyme Funktion, die das Ergebnis des inneren Funktionsaufrufs zurückgibt. Ohne lambda wird die Funktion direkt aufgerufen, so dass die "connect"-Methode als drittes Argument einen String erhält.also wenn ich lambda:sayhello(...) aufrufe wird die funktion aufgerufen und ohne lambda das objekt sayhello oder wie muss ich das verstehen?