【发布时间】:2021-09-26 11:11:48
【问题描述】:
我想在 for 循环中创建多个可点击标签。标签是结构化的网格状,具有 row 和 col 属性。如果单击标签,则应使用 print_it() 函数打印所单击标签的行和列。
问题是,如果我单击任何标签,在这种情况下,输出始终是最后定义的行/列 (2,2)。如何修复它,以便打印正确的行/列?
这是一个重现的代码示例:
from tkinter import *
def print_it(row, col):
print(row, col)
root = Tk()
sizex = 700
sizey = 400
posx = 0
posy = 0
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
canvas_area = Canvas(root)
canvas_area.grid(row=1, column=1)
labels = []
for row in range(3):
for col in range(3):
labels.append(Label(canvas_area, text=f"Row, Col: {row},{col}", bd=0))
labels[-1].grid(row=row, column=col)
labels[-1].bind(
f"<Button-1>",
lambda e: print_it(row, col),
)
root.mainloop()
【问题讨论】: