大佬们,help me!!!
代码如下:lb1 = tk.Label(text='lb1')
lb2 = tk.Label(text='lb2')
lb3 = tk.Label(text='lb3')
lb4 = tk.Label(text='lb4')
lbList =
def printLbName(lb, event):
print(lb.cget('text'))
for eachLb in lbList:
eachLb.pack()
eachLb.bind('<ButtonPress-1>', lambda event: printLbName(eachLb, event))
想实现的效果是:
点击lb1输出lb1,点击lb2输出lb2,点击lb3输出lb3,点击lb4输出lb4。
但是现在不管点击哪个label都只输出lb4{:10_247:} {:10_247:}
大佬们帮看看错在哪!应该怎么修改 你好!看起来你的问题是在 lambda 函数中引用了循环变量 eachLb 。这将导致在循环结束时 eachLb 的值为最后一个元素(在你的例子中是 lb4 )。你可以通过在 lambda 函数中使用一个默认参数来捕获当前的 eachLb 值。这是修改后的代码:
import tkinter as tk
root = tk.Tk()
lb1 = tk.Label(text='lb1')
lb2 = tk.Label(text='lb2')
lb3 = tk.Label(text='lb3')
lb4 = tk.Label(text='lb4')
lbList =
def printLbName(lb, event):
print(lb.cget('text'))
for eachLb in lbList:
eachLb.pack()
eachLb.bind('<ButtonPress-1>', lambda event, lb=eachLb: printLbName(lb, event))
root.mainloop()
这样,当你点击不同的标签时,它将输出相应的文本。希望这对你有所帮助! 陶远航 发表于 2023-7-7 13:08
你好!看起来你的问题是在 lambda 函数中引用了循环变量 eachLb 。这将导致在循环结束时 eachLb 的值为最后 ...
不同意GPT^_^ 歌者文明清理员 发表于 2023-7-7 13:09
不同意GPT^_^
6 你的问题在于Python的闭包(lambda函数)会延迟绑定。所以,当你点击lb1, lb2, lb3, 或者lb4的时候,它们引用的eachLb都是最后一个。
要解决这个问题,你需要在你的lambda函数中加一个默认参数来立即绑定eachLb的值。这样,每次循环时都会创建一个新的lambda函数,并立即绑定当时的eachLb的值,而不是在最后再去引用eachLb。修改后的代码如下:
import tkinter as tk
lb1 = tk.Label(text='lb1')
lb2 = tk.Label(text='lb2')
lb3 = tk.Label(text='lb3')
lb4 = tk.Label(text='lb4')
lbList =
def printLbName(lb, event):
print(lb.cget('text'))
for eachLb in lbList:
eachLb.pack()
eachLb.bind('<ButtonPress-1>', lambda event, lb=eachLb: printLbName(lb, event))
在这段代码中,lambda函数的参数有一个默认值eachLb,这将会在每次循环中立即捕获eachLb的当前值。之后当这个lambda函数被调用的时候,它会使用捕获的那个eachLb的值,而不是最后一个eachLb的值。 这是一个常见的循环绑定事件的问题,导致每个lambda函数中的`eachLb`变量实际上指向的是循环结束后的最后一个Label对象。要解决这个问题,可以通过使用默认参数来创建一个闭包,以捕获每个Label对象的值。请尝试以下修改:
for eachLb in lbList:
eachLb.pack()
eachLb.bind('<ButtonPress-1>', lambda event, lb=eachLb: printLbName(lb, event))
在lambda函数中增加了参数`lb=eachLb`,这样每个lambda函数都会捕获当前循环的Label对象的值作为默认参数`lb`,以确保每个Label对象与正确的lambda函数绑定。
希望能帮到你!如果还有其他问题,请随时提问。 陶远航 发表于 2023-7-7 13:17
6
{:10_244:} Ewan-Ahiouy 发表于 2023-7-7 16:08
{:5_109:} 陶远航 发表于 2023-7-7 16:18
我真想扣你分{:10_244:}
页:
[1]