2010-05-12 3 views
1

GUI 프로그래밍에 익숙하지 않으며 많은 OOP를 수행하지 않았습니다. 나는 GUI 디자인을 배우고 OOP를 닦을 수 있도록 기본 계산기 응용 프로그램에서 작업하고 있습니다. 나는 GUI와 관련된 로직을 별도로 유지해야한다는 것을 이해하지만, 필자는 기본적으로 변수를 앞뒤로 전달하는 GUI 클래스에서 로직 간의 상호 작용을 구현하는 방법을 잘 모르고있다.GUI 클래스와 로직 클래스 간의 상호 작용을 실현하는 방법

나는 TKinter를 사용하고 있는데, tkinter 변수를 내 논리로 변환하면 문자열 PY_VAR0을 보유하는 것만 보입니다.

def on_equal_btn_click(self): 
      self.entryVariable.set(self.entryVariable.get() + "=") 
      calculator = Calc(self.entryVariable) 
      self.entryVariable.set(calculator.calculate()) 

는 임은 메신저 아마 근본적으로 잘못하고 probabaly 정말 바보 같은 일을하고 있는지, 나는 (온라인과 답변을 검색 할) 시간이 실험의 상당한 금액을 지출하지만, 필자는 어떤 곳을 받고 없습니다. 어떤 도움을 주시면 감사하겠습니다.

감사합니다, V

전체 프로그램 (물론 충분한 구조를 보여 ..)

import Tkinter 

class Gui(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 
     self.create_widgets() 
     """ grid config """ 
     #self.grid_columnconfigure(0,weight=1,pad=0) 
     self.resizable(False, False) 

    def create_widgets(self): 

     """row 0 of grid""" 

     """Create Text Entry Box""" 
     self.entryVariable = Tkinter.StringVar() 
     self.entry = Tkinter.Entry(self,width=30,textvariable=self.entryVariable) 
     self.entry.grid(column=0,row=0, columnspan = 3) 
     self.entry.bind("<Return>", self.on_press_enter) 

     """create equal button""" 
     equal_btn = Tkinter.Button(self,text="=",width=4,command=self.on_equal_btn_click) 
     equal_btn.grid(column=3, row=0) 

     """row 1 of grid""" 

     """create number 1 button""" 
     number1_btn = Tkinter.Button(self,text="1",width=8,command=self.on_number1_btn_click) 
     number1_btn.grid(column=0, row=1) 

    def on_equal_btn_click(self): 
     self.entryVariable.set(self.entryVariable.get() + "=") 
     calculator = Calc(self.entryVariable.get()) 
     self.entryVariable.set(calculator.calculate()) 

class Calc(): 

    def __init__(self, equation): 
     self.equation = equation 

    def calculate(self): 
     #TODO: parse string and calculate... 
     return self.equation 

# define undefined functions for sufficiently liberal meanings of "define" 
Gui.on_press_enter = Gui.on_equal_btn_click 
Gui.on_number1_button_click = Gui.on_equal_btn_click 

if __name__ == "__main__": 
    app = Gui(None) 
    app.title('Calculator') 
    app.mainloop() 

답변

2

수정은 :

내 첫 번째 대답은 완전히 틀렸다 무시해. 문제는 실수로 입력 변수 텍스트를 entryVariable 개체의 문자열 표현으로 덮어 쓰는 것이 었습니다. Calc()에 대한 호출에 get()의 추가 참고 :

def on_equal_btn_click(self): 
    print self.entryVariable.get() 
    self.entryVariable.set(self.entryVariable.get() + "=") 
    print self.entryVariable.get() 
    calculator = Calc(self.entryVariable.get()) 
    self.entryVariable.set(calculator.calculate()) 

에 오신 것을 환영합니다 약하게 입력 된 언어, 버그의 종류 벽을 당신을 구동 할 수있다. 나는 자유 시간에 printrepr() (또는 print('foo %r' % object))을 매우 유용하다고 생각합니다.

+0

나는 당신이 뭘하려고하는지 잘 모르겠다. 변수 Im의 값을 전달하려고하면 StringVar이고 get() 메서드를 사용하고 있습니다 ... 조금 더 자세히 설명해 주시겠습니까? 어떻게 변경해야합니까? 감사합니다 – volting

+0

와우, 내가 실수라고 생각 했어 ** 수정 된 ** – msw

+0

고마워, 나는 바보 같은 것을 추측했다. 그러나 나는 그것이 명백 할 것이라고 기대하지 않았다 ... 나는 문제가 여전히 구조화 된 패러다임 모드에 있다고 생각한다! 이 상호 작용 방식이 분명히 효과적 일지는 모르겠지만 상호 작용을 구현하는 표준 및 수용 방식이 있습니까? 아니면 더 좋은 방법이 있습니까? – volting

관련 문제