Python 绑定_类和lambda不';工作不好

Python 绑定_类和lambda不';工作不好,python,tkinter,Python,Tkinter,我对bind_类函数有一个问题 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=BOT

我对bind_类函数有一个问题

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'])
对于cat_列表中的行:#将类别插入文本小部件
fr=帧(英尺,背景为紫色,宽度为200)
fr.pack(扩展=1,填充=2)
ent=入口(fr,宽度=35,背景为橙色,前景为白色)
ent.pack(side='left',expand=1,fill=2)
ent.insert(0,第[1]行)
bindtags(标记列表=['Entry','add_cat'])
bind_类('add_cat','',lambda事件,line=line,ent=ent:sqlite.update_category_name(事件,db,line,ent))
imgsd=pil_图像('imgs/required/btns/ch_pic.png',30,30)
img_位置=按钮(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(标记列表=['Button','add_cat'])
ent.bindtags(tagList=['Entry','add_cat'])
工作正常<代码>条目用于条目的行为,而
add_cat
用于滚动条绑定

问题在下一行,因为lambda不保留对line对象的引用,而是始终返回cat_列表中的最后一行


示例:如果
cat_list=[1,2,3,4,5]
i
将始终在我的函数“sqlite.update_category_name”中返回5,而不是像名字所暗示的那样分别返回1,2,3,4,5,
bind_class
绑定到一类小部件,而不是单个小部件。每次在循环中调用
bind\u class
时,都会替换以前对
bind\u class
的调用

如果希望每个小部件具有唯一的绑定,请使用
bind
而不是
bind\u class

ent.bind("<Return>", lambda event, line=line, ent=ent: sqlite.update_category_name(event, db, line, ent))
ent.bind(“,lambda事件,line=line,ent=ent:sqlite.update\u category\u name(事件,db,line,ent))

我试过了,但根本不起作用,这是我第一次尝试,用bind代替bind_类,但不起作用。就像。。。ent.bindtags(tagList=['Entry','add_cat'])ent.bind(“”,lambda event,line=line,ent=ent:sqlite.update_category_name(event,db,line,ent)),但没有效果,实际上根本没有函数调用我不明白的是,为什么bind_类使lambda不工作good@DušanAtanacković:这是因为在循环的每次迭代中都会覆盖绑定。类绑定是一类小部件上的单个绑定。它与
lambda
无关。这很简单,上次调用
bind\u class
是tkinter使用的唯一绑定。好的,但是我必须做什么才能使它工作,因为常规绑定根本不调用函数?如果您有时间参与并调试,我会在git上公开整个代码,下面是文件new luqi中_add_gui_category函数中的链接。py@DušanAtanacković:你会使用常规绑定。你说它不起作用,但它应该起作用。我看没有理由不这样做。