почему лямбда думает, что нет аргументов? python - PullRequest
0 голосов
/ 23 марта 2020

Я сделал клавиатуру как часть моего приложения

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 ]

1 голос
/ 23 марта 2020

Проблема в том, что 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')  
1 голос
/ 23 марта 2020

Ошибка возникает из-за того, что Tk пытается вызвать вашу командную (лямбда-функцию) функцию с нулевыми параметрами (поскольку команда кнопки не имеет параметров).

Вы заявили, что для этого требуется параметр, следовательно, ошибка.

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

должна работать (но, скорее всего, не будет делать то, что вы хотите, но это еще одна ошибка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...