Seite 1 von 1

Signal mit Parametern übergeben

Verfasst: Dienstag 26. September 2017, 15:59
von geobot
Hello Pythonworld,

in einer GUI möchte ich bei Klick auf einen Button eine Funktion aufrufen. Soweit funktioniert es. Nun möchte ich der Funktion Parameter übergeben.
schreibe ich: w.connect(w.b_start, SIGNAL("clicked()"), ausfuehren(Parameter1, Parameter2)) erhalte ich eine Fehlermeldung.

QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'


Ist es möglich - und bitte wie - dass man ein Ereignis mit einer Parameterübergabe versieht? Das hat für mich den Vorteil, dass ich mit lokalen Variablen arbeiten kann. - Und hier eine Frage zu globalen Variablen weniger stellen muss.

Viele Grüße
geobot

Re: Signal mit Parametern übergeben

Verfasst: Dienstag 26. September 2017, 16:12
von __deets__
Dein Fehler kommt daher, das du schon gleich die Funktion aufrufst, statt die Argumente zu binden fuer einen spaeteren Aufruf. Das sollte eigentlich mit der Hilfsklasse functools.partial funktionieren. Ich habe kein PyQt installiert, darum kann ich das nicht testen:

Code: Alles auswählen

import functools

def tuwas(argument):
      print(argument)
      
slot = functools.partial(tuwas, "hallo")
QObject.connect(..., slot)

Re: Signal mit Parametern übergeben

Verfasst: Donnerstag 28. September 2017, 12:17
von geobot
Hallo __deets__ und Freunde,

dein Vorschlag hat leider nicht geklappt.
Ich habe mir mit einer gloablen Variable vom Typ mydict = globals() geholfen. Nun kann ich aus dem Ereignis die Funktion aufrufen und muss keine Parameter übergeben.
Dennoch, danke für die Unterstützung.

geobot

Re: Signal mit Parametern übergeben

Verfasst: Donnerstag 28. September 2017, 12:35
von __deets__
Was heisst denn "nicht funktioniert"? Prinzipiell tut er das naemlich, und dein Umweg ueber globale Variablen ist natuerlich der denkbar schlechteste. Insofern waere es durchaus wert zu versuchen, dass zu loesen.