2017-10-19 50 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创建行初始化PageSix__init__内,不存在变量,因为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) 
    ... 
相关问题