粗略地说,原始代码1尝试使用伪MVC(模型,视图和控制器)体系结构。尽管没有“模型”部分,但是只有一个“视图”(一些框架)和一个“控制器”(主要应用程序)。因此,对控制器对象的引用。原始代码实际上是用来显示如何“堆叠”框架的,因此它的MVC实现非常浅,而且文档不足,因为这并不是示例的重点。
要回答您的特定问题:
self 代表当前对象。这是类的任何方法的通用第一个参数。如您所建议,它类似于Java的 this 。
parent 表示一个小部件,用作当前对象的父级。tkinter中除根窗口外的所有小部件都需要一个父级(有时也称为 master )
控制器
表示其他一些对象,这些对象旨在用作几页小部件的公共交互点。这是尝试使页面分离。也就是说,每个页面都不需要了解其他页面。如果它想与另一个页面交互(例如使其可见),则可以要求控制器使其可见。
您问: “已经定义了一个名为show_frame的函数,但是为什么要使用控制器来调用该函数呢?”
注意,它
show_frame是在单独的类(在本例中为主程序类)中定义的。在其他类中未定义。为了使其他类能够调用它,它们必须在主类的实例上调用它。该实例是
controller在其他这些类的上下文中命名的。
1注意:即使您可能在在线教程中找到了原始代码,它最初也来自以下stackoverflow答案:在tkinter中的两个帧之间切换



