Задать вопрос
OSMANOF
@OSMANOF
Segmentation fault

Почему Tkinter работает неправильно?

Я создаю калькулятор на Tkinter. И программа должна по сути выводить текст кнопки в Entry. Но такого не происходит, а выходит просто 0. Почему так происходит?

Код:
from tkinter import *
from tkinter import ttk


root = Tk()
root.title = 'Calc'
root.resizable(width=False, height=False)


display = ttk.Entry(root)
display.grid(row=0, column=0, columnspan=3)


buttons         = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
row_position    = [1, 1, 1, 2, 2, 2, 3, 3, 3, 4]
column_position = [0, 1, 2, 0, 1, 2, 0, 1, 2, 1]

for id in range(0, len(buttons)):
    ttk.Button(root, text=buttons[id], command=lambda:display.insert(0,buttons[id])).grid(row=row_position[id], column=column_position[id])

root.mainloop()
  • Вопрос задан
  • 117 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
@grecha10
Дело не в tkinter. Причина в том, что когда lambda определяется внутри цикла, ей нужно обязательно явно передавать переменную цикла. Иначе в каждой lambda окажется значение переменной в последней итерации. Напишите так и все заработает:
ttk.Button(root,
       text=buttons[id],
       command=lambda id=id: display.insert(0, buttons[id])).grid(row=row_position[id],
       column=column_position[id])
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
for i, button in enumerate(buttons):
  ttk.Button(root, text=button, command=lambda x = button: display.insert(0, x)).grid(row=row_position[i], column=column_position[i])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Denisca2828
Точно не знаю но попробуйте заменить это: display.insert(0,buttons[id]) на это display.insert(1.0,buttons[id])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы