Seite 1 von 1

Problem bei Mouse Event Binding zusammen mit Lambda

Verfasst: Sonntag 9. September 2018, 09:59
von AlexK
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?

Re: Problem bei Mouse Event Binding zusammen mit Lambda

Verfasst: Sonntag 9. September 2018, 10:22
von __deets__
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)

Re: Problem bei Mouse Event Binding zusammen mit Lambda

Verfasst: Dienstag 11. September 2018, 09:58
von AlexK
Vielen Dank! So einfach kann die Lösung manchmal sein :)