I am writing a program that will eventually ask the user to input a filename and graph the data file. However, I'm having difficulty transferring the user input file name into the next page.
I have implemented both answers shown on this page (How to access variables from different classes in tkinter?) but unfortunately can't get this to work. I'm thinking that maybe PageOne is being rewritten or that entry_field_variable is getting rewritten or not saved. I'm new to tkinter so I may be making an obvious oversight but any help is appreciated.
import tkinter as tk
LARGE_FONT= ("Verdana", 12)
NORM_FONT= ("Verdana", 10)
SMALL_FONT= ("Verdana", 8)
class mGui(tk.Tk):
def __init__(self, *args, **kargs):
tk.Tk.__init__(self, *args, **kargs)
container = tk.Frame(self)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
container.grid()
self.shared_data = {"entry_field_variable":tk.StringVar()}
self.frames = {}
for F in (StartPage, PageOne):
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):
self.controller = controller
tk.Frame.__init__(self, parent)
label_1 = tk.Label(self, text = "Start Page", font = LARGE_FONT)
label_1.grid(row = 0, column = 0)
entry1 = tk.Entry(self, textvariable = self.controller.shared_data["entry_field_variable"])
entry1.grid(row = 1, column = 0)
button1 = tk.Button(self,text = "Go", command = lambda: controller.show_frame(PageOne))
button1.grid(row = 2, column = 0)
class PageOne(tk.Frame):
def __init__(self, parent, controller):
self.controller = controller
tk.Frame.__init__(self, parent)
label_1 = tk.Label(self, text = "Page One", font = LARGE_FONT)
label_1.grid(row = 1, column = 4)
filename = self.controller.shared_data["entry_field_variable"].get()
label_2 = tk.Label(self, text = filename, font = LARGE_FONT)
label_2.grid(row = 2, column = 0)
button1 = tk.Button(self, text = "Go Back", command = lambda: controller.show_frame(StartPage))
button1.grid(row = 4, column = 1)
app = mGui()
app.mainloop()