如何在我用TKinter用Python创建的计算器上进行数学运算?
这是我的计算器代码。我不知道如何让+-/*执行它们的功能。。。我在思考我的Equals函数中的If语句如何在我用TKinter用Python创建的计算器上进行数学运算?,python,tkinter,calculator,Python,Tkinter,Calculator,这是我的计算器代码。我不知道如何让+-/*执行它们的功能。。。我在思考我的Equals函数中的If语句 from Tkinter import* calculator = Tk() calculator.title('Calcualtor') calculator.geometry('300x325') screen = Frame(calculator, bd=2, width=250, height=25, relief=SUNKEN) buttons = Frame(calculato
from Tkinter import*
calculator = Tk()
calculator.title('Calcualtor')
calculator.geometry('300x325')
screen = Frame(calculator, bd=2, width=250, height=25, relief=SUNKEN)
buttons = Frame(calculator, bd=2, width=250, height=200)
screen.grid(column=0, row=0, padx=25, pady=25)
buttons.grid(column=0, row=1, padx=25)
def appear(x):
return lambda: results.insert(END, x)
def Zero():
results.insert(END, "0")
return
def Math():
number= results.get()
results.delete(0, END)
number2=results.get()
return
def Equals():
numbers=["7", "4", "1", "8", "5", "2", "9", "6", "3"]
for index in range(9):
n=numbers[index]
Button(buttons, bg="White", text=n, width=5, height=2, command=appear(n)).grid(padx=5, pady=5, row=index%3, column=index/3)
zero= Button(buttons, bg="White", text="0", width=5, height=2, command=Zero)
zero.grid(padx=5, pady=5, column=1, row=3)
functions=["-", "+", "*", "/"]
for index in range(4):
f=functions[index]
Button(buttons, bg="White", text=f, width=5, height=2, command=Math).grid(padx=5, pady=5, row=index%4, column=3)
equals= Button(buttons, bg="White", text="=", width=5, height=2, command=Equals)
equals.grid(ipadx=10, pady=5, row=5, column=1)
numbers = StringVar()
results = Entry(screen, textvariable=numbers, width=30)
results.pack()
calculator.mainloop()
最简单的解决方案是使用
eval()
,让python为您完成所有工作。只需像处理数字一样将+-/*添加到文本条目中,然后使用equals按钮计算文本条目中的文本
进行以下更改:
def Equals():
try:
result = eval(results.get())
except:
result = "Invalid sum"
results.delete(0, END)
results.insert(0, result)
....
Button(buttons, bg="White", text=f, width=5, height=2, command=appear(f)).grid(padx=5, pady=5, row=index%4, column=3)
您还应该禁用文本输入,以便恶意用户无法执行代码。允许的表达式有多复杂?它只是
50*60
,还是可以是(50*60)+32-12
?