我有一段在tkinter中使用帧的代码。按下后退按钮时,我希望更改框架,并调用销毁标签的功能。目前我有以下代码:
b2=Button(self, text="Back", command=lambda: controller.show_frame("StartPage"))
b2.pack()
按下按钮时更改框架。
我尝试制作一个新功能,并在按下按钮而不是控制器时调用它:
def moveOn(self):
controller.show_frame("StartPage")
self.l6.destroy()
但是我得到了没有定义控制器的错误。
如何解决我的问题,或者有更好的方法来解决这个问题?
如果我需要提供更多代码,请告诉我。
答案 0 :(得分:0)
使用提议的源代码,如果类中的变量controller
具有b2=Button(...)
而类中没有moveOn()
,则可以重用command=lambda: ...
而不是假定的command=self.moveOn
。
变量
controller
肯定是其中的一个参数 class__init__()
构造函数。所以,它是一个局部变量 在函数moveOn()
被调用之前不会退出。
解决方案1 - 使用command=lambda:
将constroller
发送到函数moveOn()
。
首先修改"返回"的
command
Button
。
b2=Button(self, text="Back", command=lambda: self.moveOn(controller))
b2.pack()
而不是:
b2=Button(self, text="Back", command=self.moveOn)
b2.pack()
然后将
controller
添加为moveOn()
参数。
def moveOn(self,controller):
controller.show_frame(LoginPage)
self.l6.destroy()
而不是:
def moveOn(self):
controller.show_frame("StartPage")
self.l6.destroy()
解决方案2 - 将参数controller
存储为类变量。
在具有
的班级的__init__()
。b2=Button(...)
函数中
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()