使用输入框设置变量的值并使用Tkin将其显示在标签中

2024-04-27 19:42:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图要求用户输入一个数字(在本例中,他们需要在minEntry框中输入分钟数)。我想取这个数字,用它来设置多个变量值,把这个值和其他数字相乘。然后我想获取这个值并将其显示在sublabel函数中的__init__框中。我收到一条错误信息,上面写着'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()

如果这个类有任何用处的话,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()

Tags: textselfratelinelabelpacktkcontroller
1条回答
网友
1楼 · 发布于 2024-04-27 19:42:54

初始化类时__init__将被调用,调用时projected_figures将被调用。你知道吗

尝试初始化PageSix时,在sublabel创建行的__init__内部,没有名为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)
    ...

相关问题 更多 >