2017-03-17 36 views
0

我有一段使用tkinter中的框架的代码。当后退按钮被按下时,我希望框架改变并且一个函数销毁标签被调用。目前我有以下代码:如何使按钮更改框架并调用函数(tkinter)

b2=Button(self, text="Back", command=lambda: controller.show_frame("StartPage")) 
b2.pack() 

当按钮被按下时改变框架。

我试图让一个新的功能,并调用,当按钮被按下,而不是控制:

def moveOn(self): 
    controller.show_frame("StartPage") 
    self.l6.destroy() 

,但我得到的控制器没有定义的错误。

我该如何解决我的问题,还是有不同的更好的方法来做到这一点?

如果我需要提供更多的代码,请让我知道。

+3

如果定义了'controller'?显示你的类和函数的定义顺序。 – nbro

回答

0

利用所提出的源代码,如果在类可变controller具有在具有moveOn()类的b2=Button(...)和不是,它是时间重用command=lambda: ...代替假定command=self.moveOn

变量controller肯定的 类__init__()构造函数的参数之一。所以,它是一个局部变量,在调用函数moveOn()之前,它不会退出。

解决方案1 ​​ - 使用command=lambda:constroller发送到功能moveOn()

首先修改“返回”Buttoncommand

b2=Button(self, text="Back", command=lambda: self.moveOn(controller)) 
b2.pack() 

相反的:

b2=Button(self, text="Back", command=self.moveOn) 
b2.pack() 

然后加入controllermoveOn()参数。

def moveOn(self,controller): 
    controller.show_frame(LoginPage) 
    self.l6.destroy() 

代替:

def moveOn(self): 
    controller.show_frame("StartPage") 
    self.l6.destroy() 

解决方案2 - 存储所述参数controller为类变量。

在具有b2=Button(...)的类的__init__()函数中。

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

moveOn()使用该变量:

def moveOn(self,controller): 
    self.controller.show_frame(LoginPage) 
    self.l6.destroy() 
相关问题