鱼C论坛

 找回密码
 立即注册
查看: 3150|回复: 8

[已解决]大佬们,help me!!!

[复制链接]
发表于 2023-7-7 13:07:36 | 显示全部楼层 |阅读模式
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

大佬们帮看看错在哪!应该怎么修改
最佳答案
2023-7-7 13:07:37
你好!看起来你的问题是在 lambda 函数中引用了循环变量 eachLb 。这将导致在循环结束时 eachLb 的值为最后一个元素(在你的例子中是 lb4 )。你可以通过在 lambda 函数中使用一个默认参数来捕获当前的 eachLb 值。这是修改后的代码:
  1. import tkinter as tk
  2. root = tk.Tk()
  3. lb1 = tk.Label(text='lb1')
  4. lb2 = tk.Label(text='lb2')
  5. lb3 = tk.Label(text='lb3')
  6. lb4 = tk.Label(text='lb4')
  7. lbList = [lb1, lb2, lb3, lb4]
  8. def printLbName(lb, event):
  9.     print(lb.cget('text'))
  10. for eachLb in lbList:
  11.     eachLb.pack()
  12.     eachLb.bind('<ButtonPress-1>', lambda event, lb=eachLb: printLbName(lb, event))
  13. root.mainloop()
复制代码

这样,当你点击不同的标签时,它将输出相应的文本。希望这对你有所帮助!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-8 02:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表