更新Python的Tkinter上的帧

时间:2016-12-20 01:26:18

标签: python user-interface tkinter

我需要帮助更新相框。我做了一些研究(update()和update_idletasks()),但到目前为止没有任何工作。我可能错误地实现了这些方法。这就是我到目前为止......

import tkinter as tk
LARGE_FONT = ("Verdana", 12)

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

        container = tk.Frame(self)
        self.minsize(width=300, height=300)
        container.grid()
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}  # Store all the frames

        for F in (StartPage, CustomerLocation, CustomerPickDate):
            frame = F(container, self)  # F is the classes

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)  # Make Start Page on the top

        def show_frame(self, cont):  # Used to bring the given frame to the top/       show frame
            frame = self.frames[cont]  # Access the dic of all the frames
            frame.tkraise()

        def get_page(self, page_class):  # Get access to the page and its attributes
            return self.frames[page_class]

        def combine_funcs(self, *funcs):  # Run multi funcs at one time (attach to a button!)
            def combined_func(*args, **kwargs):
                for f in funcs:
                    f(*args, **kwargs)
            return combined_func

        def updateFrame(self,frame):
            selectedFrame = self.frames[frame]
            selectedFrame.update_idletasks()
            #frame.update_idletasks(self)
            print("hit")

class CustomerLocation(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.myparent = parent
        self.controller = controller
        self.configure(background='#ED7D3B')

        # ________________________________________________________________
        # self.variableLocation is what I want in the next frame
        # ________________________________________________________________
        self.variableLocation = tk.StringVar(self)
        self.variableLocation.set("Select")

        alist = ["Blackwood", "Camden", "Philadelphia"]

        locationOptionMenu = tk.OptionMenu(self, self.variableLocation, *alist)
        locationOptionMenu.pack()
        #print(self.variableLocation.get())


        nextButton = tk.Button(self, text="Next",
                           command=lambda: controller.combine_funcs(controller.updateFrame(CustomerPickDate),
                                                                    controller.show_frame(CustomerPickDate)
                                                                    ))
        nextButton.configure(highlightbackground='#ED7D3B')
        nextButton.pack()

        backButton = tk.Button(self, text="Back",
                           command=lambda: controller.show_frame(StartPage))
        backButton.configure(highlightbackground='#ED7D3B')
    backButton.pack()

此时,self.variableLocation应该是alist变量之一。我使用controller.get_page(FRAME)来获取该值。我想在下一帧使用此值作为标签。

class CustomerPickDate(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller  # Help Access the controller + its methods
        self.CustomerLocation = self.controller.get_page(CustomerLocation)  # Access to Frame CustomerLocation

        self.variableLocation = self.CustomerLocation.variableLocation
        print(self.variableLocation.get())


        label = tk.Label(self, text="Select Date", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

        # _______________________________________________________
        # I want the self.variableLocation from the pervious frame
        # to be here!___________________________________________
        self.label2 = tk.Label(self, text="TEST %s" % self.variableLocation.get())  # NEED FIXING/ ABLE TO UPDATE


        self.label2.pack()
        self.label2.update()


        NextButton = tk.Button(self, text="Next")
        NextButton.pack()

        BackButton = tk.Button(self, text="Back",
                           command=lambda: controller.show_frame(CustomerLocation))
        BackButton.pack()

我对Tkinter很新,所以任何反馈都会很棒!

0 个答案:

没有答案