2015-07-10 74 views
2

我目前正在尝试使用python在tkinter的帮助下构建一个GUI计算器。当我按下按钮时(例如:按钮5和5出现在条目())中,我设置了所有按钮,并与我的输入()栏互动。Python Tkinter条目()计算

剩下要做的唯一事情实际上是执行出现在entry()中的数学公式。例如,如果我在输入栏中输入5 + 5 * 2,我将如何在更新后将答案显示在条目()中?所以基本上我所要求的是有人帮助我做到这一点!

我已经提供了下面的代码和计算器的屏幕截图。另外,请不要将此举报为重复或将此问题标记为帖子,(我正在研究此问题,因为我对最后一个问题没有帮助,所以请帮助年轻的python程序员!)。另外我要求你不要给我提供链接,因为我已经阅读了tkinter上的每一个可能的链接,并且仍然不知道我在做什么。

这里是我的代码:

import sys 
from tkinter import * 
from PIL import Image, ImageTk 

#ACTIONS: 
def clear(): 
    #Action: Clears the entry(). 
    txtDisplay.delete(0,END); 
    return; 

def update_Entry(inputValue): 
    #Updates the entry when a button is pressed. 
    currentText = num1.get(); 
    update = num1.set(currentText + inputValue); 

#Parent Window. 
root = Tk(); 
root.title('Calculator ++ [1.7.2]'); 
root.geometry('350x450'); 

#Main entry. 
num1 = StringVar(); 
txtDisplay = Entry(root, textvariable = num1, relief=RIDGE, bd = 10, width=33, insertwidth = 1, font = 40, justify=RIGHT); 
txtDisplay.place(x=15, y=10); 
txtDisplay.focus(); 

print(txtDisplay.get()) 

#Buttons: 
zeroButton = Button(root, text='0', width=20, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('0')); 
zeroButton.place(x=17,y=382); 
oneButton = Button(root, text='1', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('1')); 
oneButton.place(x=17, y=302); 
twoButton = Button(root, text='2', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('2')); 
twoButton.place(x=100, y=302); 
threeButton = Button(root, text='3', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('3')); 
threeButton.place(x=182, y=302); 
fourButton = Button(root, text='4', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('4')); 
fourButton.place(x=17, y=222); 
fiveButton = Button(root, text='5', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('5')); 
fiveButton.place(x=100, y=222); 
sixButton = Button(root, text='6', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('6')); 
sixButton.place(x=182, y=222); 
sevenButton = Button(root, text='7', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('7')); 
sevenButton.place(x=17, y=142); 
eightButton = Button(root, text='8', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('8')); 
eightButton.place(x=100, y=142); 
ninthButton = Button(root, text='9', width=8, height=3, bg='LightBlue', fg='red', command=lambda:update_Entry('9')); 
ninthButton.place(x=182, y=142); 

decimalButton = Button(root, text='.', width=8, height=3, bg='powder blue', command=lambda:update_Entry('.')); 
decimalButton.place(x=182, y=382); 
equalButton = Button(root, text='=', width=8, height=8, bg='Lightgreen', command=lambda:update_Entry('=')); 
equalButton.place(x=264, y=307); 
plusButton = Button(root, text='+', width=8, height=3, bg='gray', command=lambda:update_Entry('+')); 
plusButton.place(x=264, y=222); 
minusButton = Button(root, text='-', width=8, height=3, bg='gray', command=lambda:update_Entry('-')); 
minusButton.place(x=264, y=142); 
multiplyButton = Button(root, text='x', width=8, height=3, bg='gray', command=lambda:update_Entry('*')); 
multiplyButton.place(x=264, y=66); 
divideButton = Button(root, text='÷', width=8, height=3, bg='gray', command=lambda:update_Entry('/')); 
divideButton.place(x=182, y=66); 
clearButton = Button(root, text='Clear (CE)', width=20, height=3, command = clear, bg='Orange'); 
clearButton.place(x=17, y=66); 

#Locks the parent windows size. 
root.maxsize(350,450); 
root.minsize(350,450); 

#Parent window's background color: 
root.configure(background = 'black'); 
root.mainloop(); 

截图:

Screenshot

+0

要注意,你不需要在Python中你的行尾加分号。阅读[PEP 8](https://www.python.org/dev/peps/pep-0008/),学习像专家一样格式化Python。 – Kupiakos

+0

@Kupiakos如果每行有多条语句,您将需要它们...... – nbro

+0

@ChristopherWallace您不应该这样做。 – Kupiakos

回答

5

对于一些这个简单,尝试有此作为command为您equalButton

def evaluate(): 
    currentText = num1.get() 
    try: 
     num1.set(str(eval(currentText))) 
    except SyntaxError: 
     num1.set('<ERROR>') 
+0

谢谢这段代码实际上为我工作,并帮助我。只是最后一件事,我只想知道除了syntaxerror:语句做了什么? –

+1

@PamalMangat它使得如果'eval' [抛出一个异常](https://docs.python.org/2/tutorial/errors.html)当试图评估字符串,它会捕获异常和向用户显示而不是崩溃整个程序。例如,尝试输入'2'然后输入'+',然后输入'='。 – Kupiakos