我遇到bind_class函数问题。
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不会继续引用line对象,而是总是返回cat_list中的最后一行'。
示例:如果cat_list = [1,2,3,4,5]
,i
将始终在我的函数“sqlite.update_category_name”中返回5,而不是分别返回1,2,3,4,5
答案 0 :(得分:0)
顾名思义,bind_class
绑定到小部件的类,而不是单个小部件。每次在循环中调用bind_class
时,都会替换以前对bind_class
的所有调用。
如果您希望每个小部件都具有唯一的绑定,请使用bind
而不是bind_class
。
ent.bind("<Return>", lambda event, line=line, ent=ent: sqlite.update_category_name(event, db, line, ent))