繁体   English   中英

使用输入框设置变量的值并使用Tkinter将其显示在Label中

[英]Using an entry box to set a variable's value and display it in a Label using Tkinter

我试图让用户输入一个数字(在此示例中,他们需要在minEntry框中输入分钟数)。 我想用这个数字,并用它乘以其他数字来设置多个变量值。 然后,我想使用此值,并将其显示在__init__函数内的sublabel框中。 我收到一条错误消息,提示'PageSix' object has no attribute 'peak_rate' 我有点知道这意味着什么,但我不知道如何解决。

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()

此外,如果可能有任何用处, if self.current_tariff == "x" 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()

初始化该类后,将立即调用__init__并在调用该类时调用projected_figures

当您尝试初始化PageSix ,里面__init__sublabel创建行,没有命名的变量self.peak_rate因为projected_figures尚未调用。

将变量创建移动到__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)
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM