[英]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.