tkinter语言 - 设置共享变量和不同类中的访问



我根据这篇文章的建议创建了自己的python脚本,在tkinter中的两个帧之间切换。

我也关注了这篇文章,如何在 tkinter python 3 中访问来自不同类的变量。

但是,我想在一个帧

中设置或更改共享值的值,然后在帧之间切换时在另一个帧中访问它。

class MainApplication(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        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.app = {
            "foo": None
        }
        self.frames = {}
        for F in (PageOne, PageTwo):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame
            frame.grid(row=0, column=0, sticky="nsew")
        self.show_frame("PageOne")
    def show_frame(self, page_name, **kwargs):
        # self.app["foo"] = kwargs.get("bar")
        frame = self.frames[page_name]
        frame.tkraise()
class PageOne(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        button = tk.Button(self, text="Login", command=lambda: self.func())
        button.pack()
    def func(self):
        # self.controller.show_frame("PageTwo", bar="something")
        self.controller.show_frame("PageTwo")
class PageTwo(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        print(self.controller.app["foo"])

我尝试向 show_frame(( 函数添加参数,该函数允许在帧之间切换,但 PageTwo 中的结果仍然是 None。我已经注释掉了这些行,以显示我的尝试。

重要的是要了解PageTwo.__init__在程序的一开始运行,在用户有机会做任何事情之前。如果要在切换后访问app,则必须添加切换后运行的代码。

以下答案链接到您从中复制代码的位置,向您展示了一种执行此操作的方法:

  • 我将如何制作一个每次在 tkinter 中显示帧时运行的方法

最新更新