2016-08-03 3 views
-1

Так что я сейчас в процессе создания графического пользовательского калькулятора, но не уверен, как писать код, который будет выполнять операции калькулятора. Сейчас у меня есть настройки окна, окна ввода и кнопок калькулятора, но ни один из них на самом деле ничего не делает на данный момент.Python Tkinter GUI Calculator

Я просто запутался о том, как эти кнопки представлены в коде и поэтому я не знаю, как написать блок кода, который будет в состоянии прочитать в этих входах кнопки и выполнять сложение, вычитание и т.д.

Вот мой код до сих пор

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

Я думаю, что мне нужно каким-то образом быть в состоянии прочитать входные данные как строки и затем питона оценить эту строку как математическое выражение, но я не уверен, что Чтобы обойти это.

Спасибо за помощь!

ответ

0

Что вы можете сделать, это bind все кнопки метода, который идентифицирует кнопку и добавляет строку в список или оценивает выражение. Затем этот список можно будет отобразить на этикетке.

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