Python 在我的计算器中,如何让它只解一次方程,并在计算器清除之前阻止用户输入?
我正在使用tkinter创建一个计算器,我很难弄明白如何才能让计算器只解用户输入的内容一次,并阻止下一行的进一步输入(我的输出文本小部件只有两行)。我试着只在第一行中插入输入,但它只会在第一行中插入更多。这是否可能仅仅阻止按钮在点击“=”后插入任何内容,直到我点击清除Python 在我的计算器中,如何让它只解一次方程,并在计算器清除之前阻止用户输入?,python,tkinter,calculator,tkinter-text,Python,Tkinter,Calculator,Tkinter Text,我正在使用tkinter创建一个计算器,我很难弄明白如何才能让计算器只解用户输入的内容一次,并阻止下一行的进一步输入(我的输出文本小部件只有两行)。我试着只在第一行中插入输入,但它只会在第一行中插入更多。这是否可能仅仅阻止按钮在点击“=”后插入任何内容,直到我点击清除 #function handles all calculations and inputs def calc(data): #gets last character in output last_value = o
#function handles all calculations and inputs
def calc(data):
#gets last character in output
last_value = output.get('end -2 chars')
#condition how data should be inserted
if data.isnumeric() or data == '.':
output.insert('end', data)
if last_value == '.' and data == '.': #prevents duplicating decimals
output.replace('end -3 chars', 'end -1 chars', data)
elif data in "+-*/":
output.insert('end', data)
if last_value in "+-/*": #prevents duplicating operators also replaces existing operators
output.replace('end-3c', 'end-1c', data)
elif data == 'C':
output.delete('1.0', 'end')
#solves equation
elif data == '=':
equation = output.get('end -1 lines linestart', 'end -1 lines lineend')
try:
answer = eval(equation)
output.insert('end', '\n' + str(answer))
except SyntaxError:
output.insert('end', '\n' + 'ERROR: SYNTAX')
except ZeroDivisionError:
output.insert('end', '\n' + 'ERROR: 0 DIVISION')
任何原因都不能只存储一个变量来指定是否允许计算。并在第一次计算后进行更新,是否清除
def calc(data):
#gets last character in output
last_value = output.get('end -2 chars')
#condition how data should be inserted
if data.isnumeric() or data == '.' and can_calculate: #make sure we're allowed to calculate/update
output.insert('end', data)
if last_value == '.' and data == '.': #prevents duplicating decimals
output.replace('end -3 chars', 'end -1 chars', data)
elif data in "+-*/" and can_calculate: #make sure we're allowed to calculate/update
output.insert('end', data)
if last_value in "+-/*": #prevents duplicating operators also replaces existing operators
output.replace('end-3c', 'end-1c', data)
elif data == 'C':
output.delete('1.0', 'end')
can_calculate=True #update var to reflect a calculation because we cleared
#solves equation
elif data == '=' and can_calculate:
equation = output.get('end -1 lines linestart', 'end -1 lines lineend')
try:
answer = eval(equation)
output.insert('end', '\n' + str(answer))
can_calculate = False #update var to reflect a calculation because we calculated
except SyntaxError:
output.insert('end', '\n' + 'ERROR: SYNTAX')
except ZeroDivisionError:
output.insert('end', '\n' + 'ERROR: 0 DIVISION')