如果代码中没有Tk()声明该怎么办

时间:2019-01-07 18:19:26

标签: python-3.x user-interface tkinter

因此,我遇到了一个Python3 tkinter GUI代码段,它没有像root = Tk()这样的东西,但是可以运行!我读了this,它确实很有帮助。但是我的问题是,如果在创建第一个窗口小部件时启动了tk窗口和解释器,如何在不指定根目录的情况下将更多窗口小部件添加到根目录?又名如果我没有像root这样的变量来存储根窗口对象,我想在同一程序/同一窗口中添加更多小部件时该怎么办?

顺便说一句,有一个像这样的控制器类:

class Controller(tk.Tk):
    def __init__ (self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        parentObj = tk.Frame(self)
        self.allFrames = {}
        ...

这是否意味着parentObj框架是此应用程序的窗口/框架的最外层?我在这里如何理解该类定义? tk.Tk.__init__(self, *args, **kwargs)在这里做什么?

1 个答案:

答案 0 :(得分:1)

Controllertk.Tk的子类。 Controllertk.Tk相同,但具有增强功能。因此,进行something=Controller(...)something=tk.Tk()的目的相同。

  

当我想向同一程序/同一窗口中添加更多小部件时,该怎么办

如果在类内部,请使用self作为父类;在外部,请使用类的实例。

class Controller(tk.Tk):
    def __init__ (self, *args, **kwargs):
        ...
        self.some_widget = tk.Label(self, ...)

...和...

root = Controller()
some_other_widget = tk.Label(root, ...)
  

这是否意味着parentObj框架是该应用程序的窗口/框架的最外层?

不。最外面的“层”是Controller的实例。那是根窗口。 parentObj位于该窗口内。

  

tk.Tk.__init__(self, *args, **kwargs)在这里做什么?

这只是子类初始化其父类的标准python方法。