首页 > 解决方案 > python tkinter按钮中的无效参数值

问题描述

我在将参数传递给在 tkinter 中单击令牌后调用的函数时遇到问题。m 和 n 是从 2 到 9 的整数。

当我单击按钮时,它会打印最大值,即如果 m = 9 且 n = 9,则该函数l_click仅打印最大值,即在本例中为 9 和 9。

我希望在单击网格中 m = 0 和 n = 0 的按钮后显示值 0.0。请帮助

def l_click():
    print("x",x)
    print("y",y)


 for x in range(m):
    pole.append([])
    for y in range(n):

        pole[x].append(Button(game_window,width='20',height='20',image=photo,command=l_click))
        pole[x][y].bind('<Button-3>',r_click)
        pole[x][y].grid(row=x, column=y)

标签: pythontkinter

解决方案


您面临的问题是关于 python 中的变量范围。问题是l_click()当时只打印变量的值。由于您希望在声明期间使用该值,因此请l_click使用 lambda 表达式将它们作为参数传递给函数。反映这一点的代码块类似于:

def l_click(x, y):
    print("x",x)
    print("y",y)

for x in range(m):
    pole.append([])
    for y in range(n):
        pole[x].append(Button(game_window,width='20',height='20',image=photo,command=lambda x=x, y=y: l_click(x, y)))
        pole[x][y].bind('<Button-3>', r_click)
        pole[x][y].grid(row=x, column=y)

推荐阅读