0

我在 python 和 Tkinter 中有一个我不理解的行为。我定义了自己的框架类,并希望设置某些选项,例如边框宽度和浮雕,以便我定义的每个框架都使用这些设置。我做了

from Tkinter import *

class BaseFrame(Frame):
    def __init(self,master=None,cnf={}):
        Frame.__init__(self, master,cnf)

def main():
    root = Tk()

    f = BaseFrame(root)
    l1 = Label(f,text='test')
    l2 = Label(f,text='longtext')
    l1.pack()
    l2.pack()
    f.pack()
    root.mainloop()

if __name__ == '__main__':
    main()

现在一切都在预期中。现在我尝试将设置添加到 BaseFrame,因此每一帧都会传递这些设置。

我添加到我的初始化函数:

self.configure(bg='red')

并感到惊讶,因为这个指令似乎被全班完全忽略了。如果我在 f 的创建调用中添加一个选项 bg='red':

f = BaseFrame(root,bg='red')

有用。

Frame.configure(self,bg='red')

也不起作用,以及其他一些奇怪的结构。无论我尝试什么,我都只能在创建对象时设置设置。在init函数中执行此表单似乎不起作用。

现在,如何设置选项?我错过了什么基本的东西吗?

谢谢您的帮助。

4

1 回答 1

4

假设您问题中的代码是您的实际代码,__init则永远不会调用该函数,因为它被调用__init而不是__init__. 每次调用BaseFrame(stuff)时,实际上都是在调用超级构造函数,即Frame(stuff),因为没有为 . 定义专门的构造函数BaseFrame

此外,如果您想允许诸如BaseFrame(bg='red')必须将最后一个构造函数参数更改为**cnf而不是cnf={}.

于 2012-12-19T14:01:09.490 回答