lambda为什么认为没有争论?蟒蛇

时间:2020-03-23 13:20:25

标签: python user-interface tkinter lambda

我已经将键盘作为应用程序的一部分

AmountEntered = ""
def addvalue(AmountEntered, value):
   AmountEntered = AmountEntered + value
def Clear(AmountEntered):
   AmountEntered = ""
Number = tk.Button(root, text = "7", command = lambda AmountEntered: addvalue(AmountEntered, "7"))
Number.grid(row=0, column=0, sticky='nesw')  

(所有数字0-9均重复数字)

每当我单击任何按钮时,都会收到错误消息: TypeError :()缺少1个必需的位置参数:'AmountEntered'

这实际上指的是什么,我该如何解决?

2 个答案:

答案 0 :(得分:1)

错误源于Tk试图用零参数调用命令(lambda)函数(因为按钮的命令没有参数)。

您已经声明它确实需要一个参数,因此会出现错误。

Number = tk.Button(root, text = "7", command = lambda: addvalue(AmountEntered, "7"))

应该可以工作(但可能不会真正做到您想要的,但这是另一个错误)。

答案 1 :(得分:1)

问题在于tk.Button不希望其命令接受参数,并且不传递参数。是您的回调函数正在等待一个参数而没有收到一个参数。

您期望回调收到的任何东西都必须来自其他地方。在这种情况下,似乎addvalue可以简单地将AmountEntered视为全局变量(尽管可能会有更好的替代词):

amount_entered = ""

def add_value(value):
   global amount_entered
   amount_entered += value

def clear():
   global amount_entered
   amount_entered = ""

number = tk.Button(root, text="7", command=lambda: addvalue("7"))
number.grid(row=0, column=0, sticky='nesw')  
相关问题