ubuntuusers.de

Glade Signale Parameter übergeben

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

dauerbaustelle

Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

(Python)
Hallo,
weiß jemand, wie ich mit Glade, wenn ich auf Signale Funktionen lege, Parameter (Zahlen, Strings) übergeben kann?

Ungültiges Makro

Dieses Makro ist nicht verfügbar

Dieses "Benutzerdaten" ist es nicht...
Gruß

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

Gar nicht.

Na gut, hier, wie man es trotzdem tut:
anstatt:

foo.connect("bar", mycallback(mydata))


Was natürlich nicht klappt, da dann der Rückgabewert der Funktion als Callback genutzt wird, macht man das folgendermaßen:

foo.connect("bar", lambda: mycallback(mydata))


Und gut ist. 😀

dauerbaustelle

(Themenstarter)
Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Quasi mit autoconnect dann:

"function": lambda: function(data)


?

Und wenn ich von verschiedenen Widgets die gleiche Funktion mit anderen Paramtern aufrufen will?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

Dann hast Du drei Möglichkeiten: Die Argumente als Default-Argumente an die ``lambda``-Funktion binden, ein Funktion zu schreiben, die solche Funktionen erstellt, Stichwort "Closure", oder functools.partial() verwenden.

from functools import partial

def function(data):
    print data

def make_function(data):
    def f():
        function(data)
    return f

def main():
    callback_a = lambda data=42: function(data)
    callback_b = make_function(42)
    callback_c = partial(function, 42)
    for callback in (callback_a, callback_b, callback_c):
        callback()

dauerbaustelle

(Themenstarter)
Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Hm - ich hab hier 5 gleiche GTK-Widgets (infobutton1 - infobutton5), die jeweils die gleiche Funktion aufrufen, allerdings mit anderen Parametern.
Werde vielleicht einfach die Parameter in nem Array speichern und entsprechend des Eventhandlers (= gedrückten Buttons) die enstprechenden Parameter ausgeben...

def ausgeben:
     der_letzte_buchstabe_des_widgets = kriegen #wie auch immer
     print parameter[int(der_letzte_buchstabe_des_widgets)]

Ist zwar nicht gerade sauber, tut aber.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

Und warum nimmst Du nicht eine von den drei Möglichkeiten!?

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Marc 'BlackJack' Rintsch hat geschrieben:

Und warum nimmst Du nicht eine von den drei Möglichkeiten!?

Das wäre dann ja eine saubere und funktionierende Lösung... das passt nicht zu seinen Nick 😉

@Dauerbaustelle
Nichts für ungut 😉

Antworten |