Как сделать калькулятор более нормальным?
Как это можно исправить? Понимаю, что на стоке строка ввода имеет 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 шт):
Чтобы расстановка кнопок не занимала столько места в коде, предлагаю создавать их в цикле 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

