Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使按钮更改帧并调用函数(tkinter)_Python_Tkinter - Fatal编程技术网

Python 如何使按钮更改帧并调用函数(tkinter)

Python 如何使按钮更改帧并调用函数(tkinter),python,tkinter,Python,Tkinter,我有一段在tkinter中使用帧的代码。当按下“后退”按钮时,我希望更改帧并调用销毁标签的函数。目前我有以下代码: b2=Button(self, text="Back", command=lambda: controller.show_frame("StartPage")) b2.pack() 当按下按钮时,会更改帧 我尝试创建一个新函数,并在按下按钮而不是控制器时调用该函数: def moveOn(self): controller.show_frame("StartPage")

我有一段在tkinter中使用帧的代码。当按下“后退”按钮时,我希望更改帧并调用销毁标签的函数。目前我有以下代码:

b2=Button(self, text="Back", command=lambda: controller.show_frame("StartPage"))
b2.pack()
当按下按钮时,会更改帧

我尝试创建一个新函数,并在按下按钮而不是控制器时调用该函数:

def moveOn(self):
    controller.show_frame("StartPage")
    self.l6.destroy()
但是我得到一个错误,控制器没有定义

我该如何解决我的问题,或者是否有其他更好的方法来解决


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

如果变量
控制器
在具有
b2=按钮(…)
的类中,而不是在具有
moveOn()
的类中,是时候重用
命令=lambda:…
而不是假定的
命令=self.moveOn

变量
controller
当然是 类
\uuuu init\uuuu()
构造函数。因此,它是一个局部变量 在调用函数
moveOn()
之前不会退出

解决方案1-使用
命令=lambda:
conroller
发送到函数
moveOn()

首先修改“后退”
按钮的
命令

而不是:

b2=Button(self, text="Back", command=self.moveOn)
b2.pack()
def moveOn(self):
    controller.show_frame("StartPage")
    self.l6.destroy()
然后将
controller
添加为
moveOn()
参数

而不是:

b2=Button(self, text="Back", command=self.moveOn)
b2.pack()
def moveOn(self):
    controller.show_frame("StartPage")
    self.l6.destroy()
解决方案2-将参数
控制器
存储为类变量

在具有
b2=按钮(…)
的类的
\uuuu init\uuuu()函数中

moveOn()中使用该变量:


在哪里定义了
控制器
?显示类和函数定义的顺序。
def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)
    ...
    self.controller = controller
    ...
def moveOn(self,controller):
    self.controller.show_frame(LoginPage)
    self.l6.destroy()