-2
我有一個bind_class函數的問題。bind_class和lambda不能很好地工作
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'])
該行ent.bindtags(tagList=['Entry', 'add_cat'])
工作正常。 Entry
用於Entry的行爲,add_cat
用於滾動條綁定。
問題出現在下一行,因爲lambda不保持對線對象的引用,而是始終返回cat_list中的最後一行。
例如:如果cat_list = [1,2,3,4,5]
,i
將永遠在我的功能「sqlite.update_category_name」返回5,而不是1,2,3,4,5分別
我試過了,它根本不起作用,那是我的第一次嘗試,綁定而不是bind_class,但它不起作用。它就像... ent.bindtags(tagList = ['Entry','add_cat']) ent.bind(「」,lambda event,line = line,ent = ent:sqlite.update_category_name(event, db,line,ent)) 但沒有效果,實際上根本沒有調用函數 –
我不明白的是,爲什麼bind_class讓lambda不能正常工作 –
@DušanAtanacković:這是因爲你在每次迭代時都會覆蓋你的綁定循環。一個類綁定是一個_single_綁定一個_class_的小部件。它與'lambda'無關。這只是最後一次調用'bind_class'是tkinter使用的唯一綁定。 –