2017-10-19 1 views
0

사용자에게 숫자를 입력하도록 요청합니다 (이 예에서는 minEntry 상자에 분 수를 입력해야 함) . 이 숫자를 가져 와서이 값에 다른 숫자를 곱하여 여러 변수 값을 설정하려고합니다. 그런 다음이 값을 받아 __init__ 함수 내의 sublabel 상자에 표시하고 싶습니다. 오류 메시지에 'PageSix' object has no attribute 'peak_rate'이 표시됩니다. 나는 이것이 어떤 의미인지는 일종의 알고 있지만 해결 방법을 모른다. 그것은 어떤 사용 될 수있는 경우입력 상자를 사용하여 변수 값을 설정하고 Tkinter를 사용하여 레이블에 표시

class PageSix(tk.Frame): 

    def projected_figures(self): 
     global minEntry 
     tariff = self.controller.page_get(PageTwo) 
     minutes=minEntry.get() 
     self.peak_rate = tk.StringVar() 
     self.peak_rate.set(0) 
     self.off_peak = tk.StringVar() 
     self.off_peak.set(0) 
     self.line_rental = tk.StringVar() 
     self.line_rental.set(0) 
     if tariff.current_tariff == "A": 
      self.peak_rate.set("Peak Rate: £"+minutes*0.3) 
      self.off_peak.set("Off-Peak: £"+minutes*0.05) 
      self.line_rental.set("Line Rental: £15") 
     elif tariff.current_tariff == "B": 
      self.peak_rate.set("Peak Rate: £"+minutes*0.1) 
      self.off_peak.set("Off-Peak: £"+minutes*0.02) 
      self.line_rental.set("Line Rental: £20") 
     else: 
      self.peak_rate.set("Peak Rate: £"+minutes*0.9) 
      self.off_peak.set("Off-Peak: -") 
      self.line_rental.set("Line Rental: £30") 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller=controller 
     label = tk.Label(self, text="Account Balance", font=LARGE_FONT) 
     label.pack(pady=10,padx=10) 

     sublabel = tk.Label(self, textvariable=self.peak_rate, font=SMALL_FONT) 
     sublabel.pack(pady=10,padx=10) 

     sublabel2 = tk.Label(self, textvariable=self.off_peak, font=SMALL_FONT) 
     sublabel2.pack(pady=10,padx=10) 

     sublabel3 = tk.Label(self, textvariable=self.line_rental, font=SMALL_FONT) 
     sublabel3.pack(pady=10,padx=10) 

     minLabel = Label(self, text = 'Enter Minutes: ') 
     minEntry = Entry(self) 
     minLabel.pack(pady =10, padx = 10, side = TOP, anchor = S) 
     minEntry.pack(pady =10, padx = 10, side = TOP, anchor = S) 

     button1 = tk.Button(self, text="View Projected Figures", 
          command=self.projected_figures) 
     button1.pack() 

     button2 = tk.Button(self, text="Back to Menu", 
          command=lambda: controller.show_frame(StartPage)) 
     button2.pack() 

또한 라인 tariff = self.controller.get_page(PageTwo)if self.current_tariff == "x"이 클래스를 참조한다.

class PageTwo(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller=controller 
     self.current_tariff = tk.StringVar() 
     self.current_tariff.set("A") 

     label = tk.Label(self, text="Current Tariff", font=LARGE_FONT) 
     label.pack(pady=10,padx=10) 

     sublabel = tk.Label(self, textvariable=self.current_tariff, font=SMALL_FONT) 
     sublabel.pack(pady=10,padx=10) 

     button1 = tk.Button(self, text="Change Tariff", 
          command=lambda: controller.show_frame(PageSix)) 
     button1.pack() 

     button2 = tk.Button(self, text="Projected Figures", 
          command=lambda: controller.show_frame(PageSix)) 
     button2.pack() 

     button3 = tk.Button(self, text="Back to Home", 
          command=lambda: controller.show_frame(StartPage)) 
     button3.pack() 

답변

0

__init__은 즉시 클래스를 초기화하고 당신이 그것을 호출 할 때 projected_figures가 호출 될 것이다 호출됩니다.

당신이 sublabel 생성 줄 __init__의 내부 PageSix를 초기화하려고

아직 전화하지 않은 projected_figures 이후 self.peak_rate를라는 이름의 변수가 없습니다.

__init__ 안에 변수를 생성하면이 문제가 해결됩니다.

def __init__(self, parent, controller): 
    ... 
    self.peak_rate = tk.StringVar() 
    self.peak_rate.set(0) 
    self.off_peak = tk.StringVar() 
    self.off_peak.set(0) 
    self.line_rental = tk.StringVar() 
    self.line_rental.set(0) 
    ... 
관련 문제