В переменную передаётся конец списка
Хочу сделать калькулятор, из списка btns создаются кнопки, с них берётся текст и отправляется в функцию logic.Последним в списке стоит минус и он передаётся в переменную. Вот часть кода отвечающая за отображение кнопок и логику калькулятора:
for row in range(5):
y = y + 62.5
for col in range(4):
button = Button(window, text=btns[row][col], command=lambda row=row, col=col: logic(btns[row][col]))
button.place(x=x, y=y, width=62.5, height=62.5)
x = x + 62.5
x = 0
button = Button(window, text='C', command=lambda text='C': logic(text))
button.place(x=187, y=40, width=64, height=62.5)
label = Label(window, text='0', width=35)
label.place(x=-30, y=0)
a = ''
b = ''
def logic(text):
operator = text[:1]
global a
global b
result = 0
str = '-'
print(operator.startswith(str))
if '0' <= operator <= '9':
a = a + operator
label.configure(a)
if a != '0':
b = b + operator
label.configure(b)
if operator == 'C':
label.configure(text='0')
if operator == '+':
result = int(a) + int(b)
if operator == '-':
result = int(a) - int(b)
if operator == '/':
result = int(a) / int(b)
if operator == '*':
result = int(a) * int(b)
if operator == '%':
result = int(a) % int(b)
if operator == '//':
result = int(a) // int(b)
if operator == 'x²':
result = int(a) ** int(b)
if operator == '√x':
result = sqrt(int(a))
if operator == '=':
label.configure(result)
Заранее спасибо за помощь
Ответы (1 шт):
Ошибка в этих строках:
label.configure(a)
...
label.configure(b)
Где a и b - просто текстовые строки.
При вызове метода configure для изменения свойств виджета нужно указать либо какое свойство вы хотите изменить, например label.configure(text=a), либо передавать словарь с изменяемыми свойствами, аналогично: label.configure({ 'text': a }). Либо нужно передать строку с именем свойства, чтобы получить его значение, например print(label.configure('text')).
Вы передаете строки, которые расцениваются как имена свойств, для передачи внутрь tk/tcl к имени свойства слева добавляется минус. При нажатии на 1 у вас в configure передается строка '1', такого свойства у label нет, из-за этого вылетает ошибка _tkinter.TclError: unknown option "-1".