因此,我遇到了一个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)
在这里做什么?
答案 0 :(得分:1)
Controller
是tk.Tk
的子类。 Controller
与tk.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方法。