Python 从非_init的方法/函数内部更改tkinter帧__

Python 从非_init的方法/函数内部更改tkinter帧__,python,oop,tkinter,initialization,Python,Oop,Tkinter,Initialization,我想做的是找到一种方法,从def\uu init以外的方法/函数更改帧__ 我用来更改和管理帧的主要类是: class ShopCounter(tk.Tk): def __init__ (self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) container = tk.Frame(self) container.pack(side="top", fill="bot

我想做的是找到一种方法,从def\uu init以外的方法/函数更改帧__

我用来更改和管理帧的主要类是:

class ShopCounter(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.frames = {}
        for i in (PageOne, PageTwo):
            frame = i(container, self)
            self.frames[i] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.showFrame(Login)

    def showFrame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()
我在这里遇到的问题是,当我创建一个新窗口时,例如

class PageOne (tk.Frame):
    def __init__ (self, parent, controller):
        tk.Frame.__init__(self, parent)
        lbl = tk.Label(self, text="Page 1")
        lbl.pack()
这也是在uuu init中__ 这将调用下一页函数(稍后显示) 下一页()

但我需要阅读CSV电子表格,检查此人是否输入了用户名和密码(为了方便起见,没有输入检查代码或输入字段),然后我发现我需要在PageOne类的不同函数中更改框架

然后我遇到了一个问题,现在必须在调用这个新函数时通过函数的括号定义一个控制器,这是一个问题,因为除了将它作为参数放入uu init_u方法之外,我不知道如何做

快速示例:

假设类中的函数是这样的

def nextPage (self, controller):
    controller.showFrame(PageTwo)
IDLE然后告诉我,这个函数“controller”的参数丢失了,但我不知道如何手动设置,因为我已经找到了修复方法

class PageOne (tk.Frame):
    def __init__ (self, parent, controller):
        tk.Frame.__init__(self, parent)
        lbl = tk.Label(self, text="Page 1")
        lbl.pack()

        button = tk.Button(self, text="switch", command=lambda: self.launch(controller)
        button.pack()

    def launch (self, cont):
        cont.showFrame(PageTwo)
现在,我在PageOne类中创建了一个函数(launch),该函数以self和cont(控制器)为参数。然后,按下按钮时,将控制器从init传递到启动功能

希望这能帮上一些忙因为就我个人而言,这件事已经困扰了我好几个月了

更新 经过几个月的回答,我现在找到了一种新的方法,而不是总是将控制器作为参数传递给每个page类中要使用的每个函数,在类的初始化(_uuu_u_u_u)中,您可以向保存控制器的对象声明一个变量,下面是一个示例:

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

    def doSomething (self):
        self.controller.doSomething()
通过引用控制器,您可以运行控制器类中的任何类,还可以获取变量数据并对其进行更改