Signal mit Parametern übergeben

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
geobot
User
Beiträge: 3
Registriert: Dienstag 26. September 2017, 15:46

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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)
geobot
User
Beiträge: 3
Registriert: Dienstag 26. September 2017, 15:46

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten