2016-08-03 100 views
-1

所以我目前正在制作GUI计算器的过程中,但我不确定如何编写将执行计算器操作的代码。现在我现在已经设置了窗口,输入框和计算器按钮,但是目前他们中没有一个实际做任何事情。Python Tkinter GUI计算器

我只是困惑于这些按键的代码代表,所以我不知道如何写的代码块,将能够在这些按钮输入来读取和执行加法,减法,等等

这里是我到目前为止的代码

class Calculator(Frame): 
def __init__(self,master): 
    Frame.__init__(self,master) 
    self.grid() 

    self.dataEnt = Entry(self) 
    self.dataEnt.grid(row = 0, column = 1, columnspan = 4) 

    labels =[['AC','%','/'], 
     ['7','8','9','*'], 
     ['4','5','6','-'], 
     ['1','2','3','+'], 
     ['0','.','=']] 
    label = Button(self,relief = RAISED, padx = 10, text = labels[0][0]) #AC 
    label.grid(row = 1, column = 0, columnspan = 2) 
    label = Button(self,relief = RAISED, padx = 10, text = labels[0][1]) # % 
    label.grid(row = 1, column = 3) 
    label = Button(self,relief = RAISED, padx = 10, text = labels[0][2]) #/
    label.grid(row = 1, column = 4) 
    for r in range(1,4): 
     for c in range(4): 
      #create label for row r and column c 
      label = Button(self,relief = RAISED, 
          padx = 10, 
          text = labels[r][c]) # 789* 456- 123+ 
      # place label in row r and column c 
      label.grid(row = r+1, column = c+1) 

    label = Button(self,relief = RAISED, padx = 10, text = labels[4][0]) #0 
    label.grid(row = 5, column = 0, columnspan = 2) 
    label = Button(self,relief = RAISED, padx = 10, text = labels[4][1]) # . 
    label.grid(row = 5, column = 3) 
    label = Button(self,relief = RAISED, padx = 10, text = labels[4][2]) # = 
    label.grid(row = 5, column = 4) 

    def operations(self,num): 

def main(): 
    root = Tk() 
    root.title('Calculator') 
    obj = Calculator(root) 
    root.mainloop()    

and here is what the calculator looks like so far

我的猜测是,我需要以某种方式能够读取输入的字符串,然后有蟒蛇评估该字符串作为数学表达式,但我不确定w去解决它。

感谢您的帮助!

回答

0

你可以做的是绑定到一个方法的所有按钮,该方法标识按钮并将字符串附加到列表或评估表达式。这个列表可以显示在标签中。

def button_press(self, event): 
    widget = event.widget 
    text = widget["text"] 
    if text != "AC" and text != "=": 
     self.operations.append(text) 
    elif text == "AC": 
     self.operations = [] # Clear the list. 
    elif text == "=": 
     self.evaluate() 
    self.label["text"] = "".join(self.operations) 

def evaluate(self): 
    try: 
     self.operations = [str(eval("".join(self.operations)))] 
    except (ArithmeticError, SyntaxError, TypeError, NameError): 
     self.operations = ["ERROR"] 

此代码不能被粘贴到您的程序,它只是为了演示如何解决问题。

+0

这很好,特德。我并不期待简单的复制和粘贴。感谢您提供有关此问题的见解! – NuktukHotS