Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在我用TKinter用Python创建的计算器上进行数学运算?_Python_Tkinter_Calculator - Fatal编程技术网

如何在我用TKinter用Python创建的计算器上进行数学运算?

如何在我用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

这是我的计算器代码。我不知道如何让+-/*执行它们的功能。。。我在思考我的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(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