【问题标题】:tkinter create clickable labels in for loop [duplicate]tkinter在for循环中创建可点击标签[重复]
【发布时间】: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()

【问题讨论】:

    标签: tkinter button label


    【解决方案1】:

    我实际上找到了另一个让我解决这个问题的帖子:Python Tkinter: Bind function to list of variables in a for-loop
    绑定函数的正确定义是这样的:

        labels[-1].bind(
            "<Button-1>",
            lambda event, row=row, col=col: print_it(row, col),
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多