我正在用Python的Tkinter弄脏我的手,特别是学习GUI的OOP并有一些问题。
当像这样构造一个类时:
class Keylogger(Frame):
def __init__(self, master=None):
frame = Frame.__init__(self, master)
text = Text(frame, width=20, height=5)
...
test = KeyLogger()
test.mainloop()
默认的master参数的目的是None
什么?通常我一直在学习指定像这样的主窗口小部件root = Tk()
。是否有时不需要/不需要主窗口小部件?
我还注意到,我不需要pack()
KeyLogger对象,无论它是否具有主对象。我什至没有打包我的Frame对象。这是为什么?
然后,我注意到,如果__init__
像这样更改方法中的代码,则:
def __init__(self, master=None):
Frame.__init__(self, master) # no more assignment statement
text = Text(self, width=20, height=5) # first constructor arg. changed
...
test = KeyLogger()
test.mainloop()
pack()
,无论是否存在主窗口小部件,我都必须使用KeyLogger对象。删除赋值语句并刚刚调用时发生了什么变化Frame.__init__()
?pack()
内部__init__()
还是外部调用该方法?它可以双向工作,但我猜有一些优点/缺点。谢谢!
默认的主参数为无的目的是什么?
没有目的 除的初始实例外,每个小部件都Tk
需要一个父小部件。如果是主服务器None
,它将默认使用根窗口,但显式总是比隐式更好,因此您应始终显式设置主服务器。
我还注意到,无论它是否具有主对象,都不需要pack()我的KeyLogger对象。我什至没有打包我的Frame对象。这是为什么?
这是不可能回答的。对于一个小工具来显示,有事必须调用pack
,grid
或place
(或小部件需要被插入到画布或文本组件)。您必须在未向我们展示的代码中执行某项操作。
现在,无论是否存在主窗口小部件,我都必须pack()我的KeyLogger对象。当我删除赋值语句并仅调用Frame时,发生了什么变化。初始化()?
当您将的值分配__init__
给时frame
,frame设置为None
,这意味着文本小部件将进入根窗口,而不是进入所创建的框架。某些地方必须存在导致该小部件被打包,放置或网格化的代码。
我应该在init()内部还是在类外部调用pack()方法?它可以双向工作,但我猜有一些优点/缺点。
窗口小部件(或复合部件,如这个)应该从不pack
(或grid
或place
)本身在它的父。这将产生一个紧密耦合-新类需要了解一下它的父(具体而言,在父其他部件是否也使用pack
,place
或grid
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句