Bei einer .bind-Zuweisung Funktionswerte übergeben

Fragen zu Tkinter.
Antworten
EinSteini
User
Beiträge: 5
Registriert: Sonntag 9. Juni 2019, 14:59

Hi!
Ich habe eine Funktion und möchte diese mit Knöpfen ansprechen. Da ich dies bei verschieden Mausklicks verschiedene Dinge tun möchte, benutze ich dazu die .bind Option. Allerdings kann ich keine Werte mit in die Funktion übernehmen, da dann auch immer ein Event mit übergeben wird und ich Fehlermeldungen bekomme, wenn ich versuche, auch noch andere Werte mit zu übergeben.

Code: Alles auswählen

B1 = Button(root)
B1.bind("<Button-1>", btnclick("left"))
B1.bind("<Button-3>", btnclick("right"))
Benutzeravatar
__blackjack__
User
Beiträge: 13063
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@EinSteini: Man sollte bei `Button` nicht `bind()` für Mausklicks verwenden, weil die Schaltfläche sich dann nicht mehr so verhält wie der Anwender das gewohnt ist. Normale Schaltflächen kann man beispielsweise auch wieder verlassen ohne das die Aktion ausgelöst wird, solange man den Mausknopf nicht los lässt.

Bei dem gezeigten Code vermute ich mal ganz stark, dass das Event gar keine Rolle spielt, weil man gar nicht so weit kommt, denn `btnclick()` wird ja nicht durch einen Mausklick aufgerufen, sondern schon von Dir *vor* dem Aufruf von `bind()` und `bind()` bekommt dann den Rückgabewert von `btnclick()` als zweites Argument. Was wahrscheinlich ein implizites `None` ist – womit der `bind()`-Aufruf letztlich nichts bewirkt.

Du musst da entweder eine Funktion zwischen setzen die das Ereignisargument erwartet aber ignoriert, oder in Deiner `btnclick()` halt das Ereignisargument auch erwarten. Im ersten Fall ist ein ``lambda``-Ausdruck hilfreich, im zweiten Fall solltest Du einen Blick auf `functools.partial()` werfen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten