Problem bei Mouse Event Binding zusammen mit Lambda

Fragen zu Tkinter.
Antworten
AlexK
User
Beiträge: 2
Registriert: Sonntag 9. September 2018, 09:52

Ich habe einen Tkinter-Button und möchte gerne unterschiedliche Funktionen ausführen, abhängig davon, ob ich mit der linken oder rechten Maustaste drücke. Gleichzeitig soll aber eine Variable an die Callback-Funktion übergeben werden. Der Wert der Variablen kommt aber nicht bei der Funktion an. Hier ein Minimalbeispiel:

Code: Alles auswählen

from tkinter import Button,Tk

app = Tk()

a='Hello'

but = Button(app,text='click')
but.bind('<Button-3>',lambda a=a: print(a))
but.pack()
Bei Click mit der rechten Maustaste erhalte ich als Ausgabe statt 'Hello':

Code: Alles auswählen

<ButtonPress event state=Mod1 num=3 x=16 y=13>
Aus irgendeinem Grund scheint also der Event-Handler übergeben zu werden. Kann mir da jemand weiterhelfen?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Problem ist, dass der Callback das Event als erstes Argument bekommt. du musst also ein Lambda mit mehr Argumenten definieren:

Code: Alles auswählen

lambda e, a=a: print(a)
AlexK
User
Beiträge: 2
Registriert: Sonntag 9. September 2018, 09:52

Vielen Dank! So einfach kann die Lösung manchmal sein :)
Antworten