首页 > 解决方案 > 在 tkinter 中创建与按钮关联的变量

问题描述

我正在尝试在 Tkinter 中创建一个计算器。尽管我当前的代码可以很好地在每个按钮上创建具有正确编号的按钮,因为该函数仅在创建变量的迭代完成后调用,x 始终为 8,因此所有按钮的值均为 8。我怎么能绕过这个问题?

我尝试不使用 lambda 来调用该函数,但是按钮甚至根本不起作用,我不确定为什么。

下面是基本代码:

from tkinter import *
window=Tk()
ButtonFrame=Frame(window)
ButtonFrame.place(x=100,y=100)

def NumPressed (Digit):
    print(Digit)

for y in range(3):
    for x in range(3):
        NumTXT=y*3+x
        Buttonx=Button(ButtonFrame,text=NumTXT,command=lambda:NumPressed(NumTXT))
        Buttonx.grid(row=y,column=x)

标签: python-3.xtkinter

解决方案


它与 lambda 函数中的默认值有关。按钮全部创建后,NumTXT变量 == 8。每次按下按钮时,它都会使用 的当前值NumTXT

您可以通过为 lambda 函数提供一个不会更改的默认值来解决此问题:

command=lambda x=NumTXT: NumPressed(x)
                  ^
# Set default value 

那么每个按钮都会有一个带有默认值的 lambda 函数,就像NumTXT按钮创建时一样。


推荐阅读