Создание переменных, связанных с кнопками в tkinter - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь создать калькулятор в Tkinter. Хотя мой текущий код хорошо работает для создания кнопок с правильным номером на каждой кнопке, поскольку функция вызывается только после выполнения итерации создания переменных, x всегда равно 8, и, следовательно, все кнопки имеют значение 8. Как я мог обойти эту проблему?

Я пытался без использования лямбды для вызова функции, но тогда кнопки вообще не работают, я не совсем уверен, почему.

Вот основной код:

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)

1 Ответ

1 голос
/ 19 июня 2019

Это связано со значениями по умолчанию в лямбда-функции.После того, как все кнопки созданы, переменная NumTXT == 8. Каждый раз, когда вы нажимаете кнопку, она использует текущее значение NumTXT.

. Это можно исправить, задав лямбда-функции значение по умолчанию, котороене изменяется:

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

, тогда каждая кнопка будет иметь лямбда-функцию со значением по умолчанию, как NumTXT при создании кнопки.

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