Ich habe ein Problem mit der Funktion bind_class.bind_class und Lambda funktioniert nicht gut
for line in cat_list: # insert category into Text widget
fr = Frame(ft, bg='purple', width=200)
fr.pack(expand=1, fill=BOTH)
ent = Entry(fr, width=35, bg='orange', fg='white')
ent.pack(side='left', expand=1, fill=BOTH)
ent.insert(0, line[1])
ent.bindtags(tagList=['Entry', 'add_cat'])
ent.bind_class('add_cat', "<Return>", lambda event, line=line, ent=ent: sqlite.update_category_name(event, db, line, ent))
imgsd = pil_image('imgs/required/btns/ch_pic.png', 30, 30)
img_location = Button(fr, image=imgsd, borderwidth=2, relief="groove", fg='white', anchor='w', command=lambda line3=line:chPic(line3))
img_location.image = imgsd
img_location.pack(side='left', expand=0, fill=BOTH)
img_location.bindtags(tagList=['Button', 'add_cat'])
die Linie ent.bindtags(tagList=['Entry', 'add_cat'])
funktioniert gut. Entry
ist für das Verhalten von Entry und add_cat
wird für Scrollbar-Bindung verwendet.
Das Problem ist in der nächsten Zeile, da Lambda den Verweis auf das Linienobjekt nicht behält, sondern immer die letzte 'Zeile' in cat_list zurückgibt.
Beispiel: Wenn cat_list = [1,2,3,4,5]
wird i
immer wieder zurückkehren 5 in meiner Funktion "sqlite.update_category_name" anstelle von 1,2,3,4,5 bzw.
Ich habe versucht, es hat überhaupt nicht funktioniert, das war mein erster Versuch, bind statt bind_class, aber es hat nicht funktioniert. Es war wie ... ent.bindtags (tagList = ['Eintrag', 'add_cat']) ent.bind ("", Lambda-Ereignis, Zeile = Zeile, ent = ent: sqlite.update_category_name (Ereignis, (db, line, ent)) aber keine Effekte, eigentlich keine Aufrufe für Funktion überhaupt –
was ich nicht verstehe ist, warum bind_class macht Lambda nicht funktioniert gut –
@ DušanAtanacković: es ist, weil Sie Ihre Bindung bei jeder Iteration von überschreiben die Schleife. Eine Klassenbindung ist eine _single_ Bindung für eine _class_ von Widgets. Es hat nichts mit 'Lambda' zu tun. Dies ist einfach der Fall, dass das letzte Mal, wenn Sie 'bind_class' aufrufen, die einzige Bindung ist, die von tkinter verwendet wird. –