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