2016-08-03 144 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