Как сделать калькулятор более нормальным?

введите сюда описание изображения

Как это можно исправить? Понимаю, что на стоке строка ввода имеет row = 0 и column = 0. Может, что-то с кнопками?

from tkinter import *

name = Tk()
name.title('Calculator')
entry = Entry(name)
entry.grid()

b1 = Button(name, text='7', width=6)
b2 = Button(name, text='8', width=6)
b3 = Button(name, text='9', width=6)
b4 = Button(name, text='=', width=6)
b5 = Button(name, text='4', width=6)
b6 = Button(name, text='5', width=6)
b7 = Button(name, text='6', width=6)
b8 = Button(name, text='/', width=6)
b9 = Button(name, text='1', width=6)
b10 = Button(name, text='2', width=6)
b11 = Button(name, text='3', width=6)
b12 = Button(name, text='x', width=6)
b13 = Button(name, text='0', width=6)
b14 = Button(name, text=',', width=6)
b15 = Button(name, text='+', width=6)
b16 = Button(name, text='-', width=6)

b1.grid(row=1, column=0)
b2.grid(row=1, column=1)
b3.grid(row=1, column=2)
b4.grid(row=1, column=3)
b5.grid(row=2, column=0)
b6.grid(row=2, column=1)
b7.grid(row=2, column=2)
b8.grid(row=2, column=3)
b9.grid(row=3, column=0)
b10.grid(row=3, column=1)
b11.grid(row=3, column=2)
b12.grid(row=3, column=3)
b13.grid(row=4, column=0)
b14.grid(row=4, column=1)
b15.grid(row=4, column=2)
b16.grid(row=4, column=3)

name.mainloop()

Ответы (1 шт):

Автор решения: denisnumb

Чтобы расстановка кнопок не занимала столько места в коде, предлагаю создавать их в цикле for, предварительно расставив в нужном порядке в массиве.

Таким образом получаем гораздо более компактный код:

from tkinter import *

name = Tk()
name.title('Calculator')

bttn_list = [
    "1", "2", "3", "+","-",
    "4", "5", "6", "*","/",
    "7", "8", "9", "-/+", "=",
    "0", ".", "С",
]
r = 1
c = 0

for i in bttn_list:
    rel = ""
    Button(name, text = i, width = 10).grid(row = r, column = c)
    c += 1
    if c > 4:
        c = 0
        r += 1

entry = Entry(name, width = 70)
entry.grid(row = 0, column = 0, columnspan = 5)

name.mainloop()

Результат:

введите сюда описание изображения

Естественно, вы можете расставить кнопки по своему и задать им нужные вам размеры


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

В том же цикле, перед объявлением кнопки добавляем строку cmd = lambda x = i: func(x), где func() - функция, принимающая значение при нажатии кнопки.

После чего добавляем в параметры кнопки command = cmd

→ Ссылка