了解Tkinter中的父级和控制器__init__

时间:2015-09-30 11:11:46

标签: python tkinter

我想了解以下代码的含义:

class PageOne(tk.Frame):

    def __init__(self, parent, controller):

什么是selfparentcontroller?这些工具的作用和范围是什么?

我相信self与Java中的this相似,但parentcontroller有什么用?

稍后在代码流程中我可以看到:

button1 = tk.Button(self, text="Back to Home",
      command=lambda: controller.show_frame(StartPage))

已经定义了一个名为show_frame的函数,但是为什么控制器被用来调用这个函数?

1 个答案:

答案 0 :(得分:13)

粗略地说,原始代码 1 试图使用伪 - MVC(模型,视图和控制器)架构。虽然没有"模型"部分 - 只有一个"视图" (一些帧)和一个"控制器" (主要应用)。因此,对控制器对象的引用。原始代码实际上是为了展示如何" stack"框架,因此它的MVC实现非常浅,并且没有记录,因为这不是示例的重点。

回答您的具体问题:

self 表示当前对象。这是类的任何方法的常见第一个参数。正如您所建议的那样,它类似于Java的 this

parent 表示一个小部件,用作当前对象的父级。除根窗口外,tkinter中的所有小部件都需要父级(有时也称为 master

控制器表示一些其他对象,旨在充当多个小部件页面的公共交互点。这是尝试解耦页面。也就是说,每个页面都不需要知道其他页面。如果它想要与另一个页面交互,例如使其可见,它可以要求控制器使其可见。

您问过"有一个已定义的函数叫做show_frame,但是为什么控制器被用来调用这个函数?" 注意show_frame已定义在一个单独的类中,在这种情况下是主程序类。它没有在其他类中定义。对于其他类可以调用它,它们必须在主类的实例上调用它。该实例在这些其他类的上下文中被命名为controller

1 注意:即使您可能在在线教程中找到原始代码,它最初来自此stackoverflow答案:Switch between two frames in tkinter