#python #tkinter #computer-science
#питон #tkinter #информатика
Вопрос:
Я получаю ошибку отступа в своем компиляторе Eclipse, я отметил конкретную строку ниже, где находится ошибка. У кого-нибудь есть какие-нибудь идеи по исправлению? Это для задания в школе, и я понятия не имею, как это исправить, и я в полной, абсолютной растерянности. Я был бы признателен за любые советы. «Напишите программу на основе графического интерфейса, которая имитирует простой карманный калькулятор. Графический интерфейс отображает одно поле ввода для вывода (я бы предложил сделать его полем только для чтения). Он должен предоставить пользователю 10 цифровых кнопок от 0 до 9 и семь функциональных клавиш для , -, *, /, C (C предназначен для очистки дисплея),. (десятичная точка) и =. = — это вычисление правильного ответа. Если есть ошибка, например, деление на ноль, в поле ввода должно отображаться ошибка или ошибка. Значения в поле ввода построят строку, которая будет преобразована в значение с плавающей точкой для вычисления.» Это задание, которое я должен выполнить.
from tkinter import * from tkinter import font as tkFont # for convenience expression = "" # functions def input_number(number, equation): global expression # concatenation of string expression = expression str(number) equation.set(expression) def clear_input_field(equation): global expression expression = "" # setting empty string in the input field equation.set("Enter the expression") def evaluate(equation): global expression # trying to evaluate the expression try: result = str(eval(expression)) equation.set(result) expression = "" except: equation.set("Error: Divide by zero") expression = "" def main(): # creating main window tk = Tk() # setting the title tk.title("Calculator") # seting the size of window tk.geometry("570x500") # varible class instantiation equation = StringVar() # input field for the expression input_field = Entry(tk, textvariable=equation) input_field.place(height=100) input_field.grid(columnspan=4, ipadx=200, ipady=10) equation.set("Enter the expression") myFont = tkFont.Font(family='Helvetica', size=12, weight='bold') input_field['font']=myFont # creating buttons and placing them at respective positions _1 = Button(tk, text='1', fg='black', bg='red', bd=2, command=lambda: input_number(1, equation), height=5, width=10) #I'm getting an error on this line _1['font'] = myFont _1.grid(row=2, column=0) _2 = Button(tk, text='2', fg='black', bg='red', bd=2, command=lambda: input_number(2, equation), height=5, width=10) _2.grid(row=2, column=1) _3 = Button(tk, text='3', fg='black', bg='red', bd=2, command=lambda: input_number(3, equation), height=5, width=10) _3.grid(row=2, column=2) _4 = Button(tk, text='4', fg='black', bg='red', bd=2, command=lambda: input_number(4, equation), height=5, width=10) _4.grid(row=3, column=0) _5 = Button(tk, text='5', fg='black', bg='red', bd=2, command=lambda: input_number(5, equation), height=5, width=10) _5.grid(row=3, column=1) _6 = Button(tk, text='6', fg='black', bg='red', bd=2, command=lambda: input_number(6, equation), height=5, width=10) _6.grid(row=3, column=2) _7 = Button(tk, text='7', fg='black', bg='red', bd=2, command=lambda: input_number(7, equation), height=5, width=10) _7.grid(row=4, column=0) _8 = Button(tk, text='8', fg='black', bg='red', bd=2, command=lambda: input_number(8, equation), height=5, width=10) _8.grid(row=4, column=1) _9 = Button(tk, text='9', fg='black', bg='red', bd=2, command=lambda: input_number(9, equation), height=5, width=10) _9.grid(row=4, column=2) _0 = Button(tk, text='0', fg='black', bg='red', bd=2, command=lambda: input_number(0, equation), height=5, width=10) _0.grid(row=5, column=0) plus = Button(tk, text=' ', fg='black', bg='red', bd=2, command=lambda: input_number(' ', equation), height=5, width=10) plus.grid(row=2, column=3) minus = Button(tk, text='-', fg='black', bg='red', bd=2, command=lambda: input_number('-', equation), height=5, width=10) minus.grid(row=3, column=3) multiply = Button(tk, text='*', fg='black', bg='red', bd=2, command=lambda: input_number('*', equation), height=5, width=10) multiply.grid(row=4, column=3) divide = Button(tk, text='/', fg='black', bg='red', bd=2, command=lambda: input_number('/', equation), height=5, width=10) divide.grid(row=5, column=3) equal = Button(tk, text='=', fg='black', bg='red', bd=2, command=lambda: evaluate(equation), height=5, width=10) equal.grid(row=5, column=2) _1['font'] = myFont _2['font'] = myFont _3['font'] = myFont _4['font'] = myFont _5['font'] = myFont _6['font'] = myFont _7['font'] = myFont _8['font'] = myFont _9['font'] = myFont _0['font'] = myFont plus['font'] = myFont minus['font'] = myFont multiply['font'] = myFont divide['font'] = myFont equal['font'] = myFont clear = Button(tk, text='Clear', fg='black', bg='red', bd=2, command=lambda: clear_input_field(equation), height=5, width=10) clear.grid(row=5, column=1) clear['font']=myFont # showing the GUI continue tk.mainloop() if __name__ == '__main__': main()```
Комментарии:
1. Совершенно очевидно, что есть много линий, которые не выстраиваются в линию.
2. В качестве примечания, вы должны хранить свои кнопки в массиве, а не иметь 10 отдельных переменных. Тогда вы могли бы сделать
for b in btns:
/b['font'] = myFont
.3. в строках после
# creating buttons and placing them at respective positions
» доplus['font'] = myFont
» есть несколько лишних пробелов (2 пробела). Кроме того,main()
перед ним должно быть (4 пробела). Они не наблюдаются в вашем коде, которые связаны с ошибкой намерения.
Ответ №1:
Выделенная вами строка и следующие строки имеют отступ на дополнительный шаг — убедитесь, что они совпадают со строкой выше, так как они не находятся внутри другого блока (например, функции или оператора if).