Обновление кадра Tkinter - PullRequest
0 голосов
/ 10 мая 2018

Итак, я прочитал несколько постов здесь и перепробовал их все. Текущий метод, который я попытался сохранить данные в контроллере:

class App(tk.Tk):
    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)

        self.app_data = {"building": tk.StringVar()}

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

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

Затем мой PageOne получает от пользователя информацию о том, какое здание они хотят:

class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller

        #buidling
        bldg_label = ttk.Label(self, text="Building Name (ie. ACAD):", font=LARGE_FONT)
        bldg_label.grid(row=0, column=0, padx=2, pady = 10)

        self.bldg_entry =ttk.Entry(self,width = 6, textvariable = self.controller.app_data["building"])
        self.bldg_entry.grid(row=0, column=1, padx=2, pady=10)
button1 = ttk.Button(self, text="next", command = lambda: controller.show_frame(PageTwo))

        button1.grid(row = 1, column = 0)

Наконец, я хочу отобразить здание, которое они ввели в поле ввода, в виде метки:

class PageTwo(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller

        bldg = self.controller.app_data["building"].get()
        bldg_label = ttk.Label(self, text = "Building: " + str(bldg), font=LARGE_FONT)

        bldg_label.grid(row = 0, column =0)
        button1 = ttk.Button(self, text="Back to Home",
                            command=lambda: controller.show_frame(StartPage))
        button1.grid(row = 1, column =0)

Я знаю, что должно быть какое-то обновление, но я просто не могу понять, какая структура нужна для этой работы. На этикетке напечатано: Building:, в которой ничего нет. У меня вопрос, как я могу получить данные, которые хранятся в словаре, чтобы обновить метку здания в SecondPage? Любая помощь будет принята с благодарностью!

...