0

Python と Tkinter で動作がわかりません。私は独自のフレーム クラスを定義し、borderwidth やレリーフなどの特定のオプションを設定して、定義するすべてのフレームがこれらの設定を使用するようにしたいと考えました。やった

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')

この命令はクラスによって完全に無視されているように見えるため、驚きました。オプション bg='red' を f の作成呼び出しに追加すると:

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 に答える