Mar-01-2020, 07:40 PM
Hi,
I want to pass the result of the function calculate in line 115 to another class, in this case , PageTwo -> function: pasvariable in line 161, but I do wrong something...
I want to pass the result of the function calculate in line 115 to another class, in this case , PageTwo -> function: pasvariable in line 161, but I do wrong something...
import tkinter as tk from tkinter import ttk from tkinter import * LARGE_FONT = ("Verdana", 12) class reverberationTime(tk.Tk): def __init__(self,*args,**kwargs): tk.Tk.__init__(self, *args, **kwargs) tk.Tk.wm_title(self, "reverberation time") tk.Tk.iconbitmap(self,"C:/Users/PC/Desktop/Icons/speaker.ico") container = tk.Frame(self) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) self.frames = {} for F in (StartPage, PageOne, PageTwo, PageThree): frame = F(container, self) self.frames[F] = frame frame.grid(row=0, column=0, sticky="nsew") self.show_frame(StartPage) def show_frame(self,cont): frame = self.frames[cont] frame.tkraise() class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self,parent) label = tk.Label(self, text="reverberation time", font=LARGE_FONT) label.pack(pady = 10, padx = 10) button = ttk.Button(self, text="welcome!", command=lambda: controller.show_frame(PageOne)).pack() class PageOne(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) NORMAL_FONT=("Arial",11) title = tk.Label(self, text="Please enter the dimensions", font=LARGE_FONT) title.pack(pady = 10, padx = 10) frame = Frame(self) frame.pack(pady=20) self.lenght = StringVar() self.wide = StringVar() self.height = StringVar() self.v = StringVar() self.dimensions = Frame(frame) self.dimensions.pack(side='left', pady=5) entryfields = Frame(frame) entryfields.pack(side='right', pady=5) Label(self.dimensions, text="lenght:", font=NORMAL_FONT).pack(pady=3) Label(self.dimensions, text="wide:", font=NORMAL_FONT).pack(pady=4) Label(self.dimensions, text="height:", font=NORMAL_FONT).pack(pady=4) self.volume=Label(self.dimensions, textvariable = self.v).pack() rl = Entry(entryfields, textvariable = self.lenght) rl.pack(pady=6) rw = Entry(entryfields, textvariable = self.wide) rw .pack(pady=6) rh = Entry(entryfields, textvariable = self.height) rh.pack(pady=6) #fa = Entry(entryfields) #fa.pack(pady=6) button3 = ttk.Button(self, text="calculate") button3.pack() button3.bind("<Button-1>", self.calculate) button2 = ttk.Button(self, text="Page 2", command=lambda: controller.show_frame(PageTwo)) button2.pack() button1 = ttk.Button(self, text="Start Page", command=lambda: controller.show_frame(StartPage)) button1.pack() def calculate(self, carryout): try: l = float(self.lenght.get()) b = float(self.wide.get()) h = float(self.height.get()) p = l*b*h self.v.set("volume: % .2f m³" % p) return p except ValueError: tk.messagebox.showinfo('No valid input.','Please enter only numbers!',icon = 'warning') class PageTwo(PageOne, tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) frame = Frame(self) frame.pack(pady=20) self.s = StringVar() self.dimension = Frame(frame) self.dimension.pack(side='left', pady=5) label = tk.Label(self, text="Page 2", font=LARGE_FONT) label.pack(pady = 10, padx = 10) pasvar = tk.Label(self.dimension, textvariable = self.s) pasvar.pack() button1 = ttk.Button(self, text="Start Page", command=lambda: controller.show_frame(StartPage)).pack() button2 = ttk.Button(self, text="Page 1", command=lambda: controller.show_frame(PageOne)).pack() button3 = ttk.Button(self, text="pasvariable") button3.pack() button3.bind("<Button-1>", self.pasvariable) def pasvariable(self, var): m = PageOne.__init__(self,parent,controller) self.s.set("volume: % .2f m³" % m) return m class PageThree(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) app = reverberationTime() app.mainloop()I get this error:
runfile('E:/Python/Akustik/Akustik/Nachhallzeit_Rechner.py', wdir='E:/Python/Akustik/Akustik') Exception in Tkinter callback Traceback (most recent call last): File "E:\Anaconda\Anacon\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "E:/Python/Akustik/Akustik/Nachhallzeit_Rechner.py", line 156, in pasvariable m = PageOne.__init__(self,parent,controller) NameError: name 'parent' is not defined