2017-03-17 40 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() 
相關問題