我在python和Tkinter中有一个行为我不明白。 我定义了自己的帧类,并希望设置某些选项,如borderwidth和relief,以便我定义的每个帧都使用这些设置。 我做了
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,因此每个帧都会传递这些设置。
我已加入 init 功能:
self.configure(bg='red')
并且感到惊讶,因为这个指令似乎完全被班级忽略了。 如果我在f:
的创建调用中添加一个选项bg ='red'f = BaseFrame(root,bg='red')
它有效。
Frame.configure(self,bg='red')
也不起作用,以及其他一些奇怪的结构。无论我尝试什么,我只能在创建对象时设置设置。在 init 功能中执行此表单似乎不起作用。
现在,我该如何设置选项?我想念一些基本的东西吗?
感谢您的协助。
答案 0 :(得分:4)
假设您问题中的代码是您的实际代码,则永远不会调用__init
函数,因为它被称为__init
而不是__init__
。每次调用BaseFrame(stuff)
时,实际上都在调用超级构造函数,即Frame(stuff)
,因为没有为BaseFrame
定义专门的构造函数。
此外,如果您想允许BaseFrame(bg='red')
之类的内容,则必须将最后一个构造函数参数更改为**cnf
而不是cnf={}
。