我正在用Python的Tkinter弄脏我的手,特别是学习GUIs的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()
默认主参数是None
的目的是什么?通常我一直在学习指定一个主小部件,比如root = Tk()
。是否有时不需要/不需要主部件?
我还注意到,我不需要pack()
我的KeyLogger对象,不管它是否有主对象。我甚至没有打包我的框架对象。为什么?
然后我注意到,如果我将__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__()
时发生了什么变化?你知道吗__init__()
内还是在类外调用pack()
方法?它是双向的,但我猜有一些优点/缺点。你知道吗谢谢!
1。 在这段代码中,由于init不返回任何内容,所以只需初始化一个带有None的文本,如
您需要在
__init__()
内使用text.pack()
使其生效。你知道吗主控件用作主控件。没有它的小部件是它自己的主小部件。这就是为什么有时我们不给它一个主人。你知道吗
2。你知道吗
在这段代码中,通过给文本一个self参数,可以用一个Frame实例初始化文本。您需要在
__init__()
内部和主进程中进行打包,以使它们都生效。就像如果这有帮助,请确认它作为一个答案,以便其他人可以很快找到它。谢谢!你知道吗
没有目的。除了
Tk
的初始实例之外,每个小部件都需要一个父小部件。如果主窗口是None
,它将使用根窗口作为默认窗口,但是显式窗口总是优于隐式窗口,因此您应该始终显式设置主窗口。你知道吗不可能回答这个问题。要显示小部件,必须调用
pack
、grid
或place
(或者,小部件需要插入画布或文本小部件)。你一定是在代码中某个地方做了你没有给我们看的事情。你知道吗当您将
__init__
的值赋给frame
时,frame被设置为None
,这意味着文本小部件进入根窗口而不是您正在创建的框架。在某个地方一定有代码导致小部件被打包、放置或网格化。你知道吗小部件(或复合小部件,如此)不应在其父部件中自身
pack
(或grid
或place
)。这就产生了一种紧密耦合,新类需要知道有关其父类的一些信息(特别是,父类中的其他小部件是否也使用pack
、place
或grid
)。你知道吗相关问题 更多 >
编程相关推荐