Tkinter / GUI基本问题

我正在用Python的Tkinter弄脏我的手,特别是学习GUI的OOP并有一些问题。

  1. 当像这样构造一个类时:

    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对象。这是为什么?

  2. 然后,我注意到,如果__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__()还是外部调用该方法它可以双向工作,但我猜有一些优点/缺点。

谢谢!

布莱恩·奥克利(Bryan Oakley)

默认的主参数为无的目的是什么?

没有目的 除的初始实例外,每个小部件都Tk需要一个父小部件。如果是主服务器None,它将默认使用根窗口,但显式总是比隐式更好,因此您应始终显式设置主服务器。

我还注意到,无论它是否具有主对象,都不需要pack()我的KeyLogger对象。我什至没有打包我的Frame对象。这是为什么?

这是不可能回答的。对于一个小工具来显示,有事必须调用packgridplace(或小部件需要被插入到画布或文本组件)。您必须在未向我们展示的代码中执行某项操作。

现在,无论是否存在主窗口小部件,我都必须pack()我的KeyLogger对象。当我删除赋值语句并仅调用Frame时,发生了什么变化。初始化()?

当您将的值分配__init__给时frame,frame设置为None,这意味着文本小部件将进入根窗口,而不是进入所创建的框架。某些地方必须存在导致该小部件被打包,放置或网格化的代码。

我应该在init()内部还是在类外部调用pack()方法它可以双向工作,但我猜有一些优点/缺点。

窗口小部件(或复合部件,如这个)应该从不pack(或gridplace)本身在它的父。这将产生一个紧密耦合-新类需要了解一下它的父(具体而言,在父其他部件是否也使用packplacegrid

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章