我刚刚开始学习Python,最近我阅读了有关使用tkinter切换窗口的教程。在本教程中,家伙从__init__
使用lambda的按钮内部切换了窗口,但是我想在切换窗口之前先完成一个函数。该函数从Class内部运行WindowA
,需要在class内部调用一个函数GLApp
。运行该函数后,如果成功,则应该将其打开WindowB
。
如果尝试从中的函数内部调用show_frame,则会收到此错误windowA
。
--controller is not defined
有人可以解释一下实际上可以从windowA函数内部调用show_frame函数背后的思考过程,我会很感激!
class GLApp(tk.Tk):
def __init__(self, *args, **kwargs):
self.frames = {}
for F in (WindowA, WindowB):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class windowA(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
#window styling and function calling
self.attempt_login = tk.Button(self,text="Login",command= self.function)
def function(self):
try:
trysomething
else:
controller.show_frame(WindowB)
本教程没有告诉您的是,您应该保存一个controller实例,以便可以在页面类的每个函数中使用它。要查看为该教程复制的原始代码,请参阅https://stackoverflow.com/a/7557028/7432
在其中,您将看到每个页面类要做的第一件事就是保存控制器。完成后,您可以self.controller
在页面类中的任何地方使用。
另外,在您的代码中,您嵌套function
在中__init__
。在这种情况下,根本没有理由这样做。将函数移出一级,并像下面这样编写:
class windowA(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
self.controller = controller
...
def function(self):
try:
trysomething
else:
self.controller.show_frame(WindowB)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句