Wie kann ich der Funktion end_fun Übergabeparameter übergebe

Fragen zu Tkinter.
Antworten
winterfest
User
Beiträge: 11
Registriert: Freitag 4. Mai 2012, 19:20

Hallo,
ich bin auf der Suche nache einer Möglichkeit Übergabeparameter für die Funktion, die beim Beenden des Fensters (Tkinter) aufgerufen wird zu übergeben.

hier ein Code-beispiel:

Code: Alles auswählen

main_window[0].protocol('WM_DELETE_WINDOW', end_fun, [verbindung_zu_IPCModul])
Wie kann ich der Funktion end_fun Übergabeparameter übergeben?

So wie oben geht es nicht.

Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Heißt das Ding evtl. `end_func`? ;-)

Wenn Du das dynamisch regeln willst, dann kannst Du per `functools.partial` ein Callable erzeugen, welches die Funktion mit vorher definierten Parametern aufrufbar macht.

Nebenbei sehe ich aus Deinem Code-Beispiel nicht, wie Du das bisher versucht hast...

... und Fettdruck muss eigentlich nicht sein. Wir können bei so einem kleinen Beitrag schon die wichtigen Sachen heraus filtern ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
winterfest
User
Beiträge: 11
Registriert: Freitag 4. Mai 2012, 19:20

Hallo,

ich habe versucht die Parameter

main_window[0].protocol('WM_DELETE_WINDOW', end_fun, [verbindung_zu_IPCModul])

so zu übergeben

Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Genau das *so* hättest Du erklären sollen... :roll: Als Parameter willst Du also eine Liste mit einem Element übergeben, also diesen Teil:

Code: Alles auswählen

[verbindung_zu_IPCModul]
Das hätte doch schon als Erklärung ausgereicht! Natürlich habe ich mir das schon oben gedacht, aber ein wenig Präzision schadet eben nicht, wenn man Hilfe will! Wie können ja nicht ahnen, das `verbindung_zu_IPCModul` (ziemlich sperriger Name btw) nun genau der Parameter ist, den Du an `end_func` übergeben willst :roll:

Naja, ich habe Dir ja eine Lösung bereits verraten ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
winterfest
User
Beiträge: 11
Registriert: Freitag 4. Mai 2012, 19:20

Wie auch immer....

ich habe es nun so gemacht.

Code: Alles auswählen

main_window[0].protocol('WM_DELETE_WINDOW', lambda:end_fun(verbindung_zu_IPCModul))
Danke für die Hilfe und Grüße
winterfest
User
Beiträge: 11
Registriert: Freitag 4. Mai 2012, 19:20

@Hyperion... kannst Du Deine Lösung mal beschreiben?

Danke
BlackJack

Code: Alles auswählen

from functools import partial

# ...

main_window.protocol('WM_DELETE_WINDOW', partial(end_func, ipc_connection))
Antworten