我正在尝试在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)
答案 0 :(得分:1)
这与lambda函数中的默认值有关。所有按钮创建完成后,NumTXT
变量==8。每次按下按钮时,它都会使用NumTXT
的当前值。
您可以通过为lambda函数提供一个不会更改的默认值来解决此问题:
command=lambda x=NumTXT: NumPressed(x)
^
# Set default value
然后每个按钮将具有一个lambda函数,其默认值是创建按钮时的NumTXT
。