|
30鱼币
代码如下:
lb1 = tk.Label(text='lb1')
lb2 = tk.Label(text='lb2')
lb3 = tk.Label(text='lb3')
lb4 = tk.Label(text='lb4')
lbList = [lb1, lb2, lb3, lb4]
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
大佬们帮看看错在哪!应该怎么修改
你好!看起来你的问题是在 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 = [lb1, lb2, lb3, lb4]
- 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()
复制代码
这样,当你点击不同的标签时,它将输出相应的文本。希望这对你有所帮助!
|
最佳答案
查看完整内容
你好!看起来你的问题是在 lambda 函数中引用了循环变量 eachLb 。这将导致在循环结束时 eachLb 的值为最后一个元素(在你的例子中是 lb4 )。你可以通过在 lambda 函数中使用一个默认参数来捕获当前的 eachLb 值。这是修改后的代码:
这样,当你点击不同的标签时,它将输出相应的文本。希望这对你有所帮助!
|