tkinterのクラス化時におけるsuper().init(master)とsuper().init()の挙動を確認していた時に考えてもよくわからなかった挙動がありましたので質問させていただきます。
元々のプログラムは以下のようなもので、実行するとこうなります
Python
import tkinter as tk class PaFrame(tk.Frame): def __init__(self, master): super().__init__(master, relief="groove", bd=10, width=300, height=200) self.propagate(True) self.grid_propagate(False) self.grid(row=0, column=0, sticky=tk.NSEW) #フレームの作成 self.Frame = ChFrame(master=self) self.Frame.grid(row=0, column=0, sticky=tk.NSEW) class ChFrame(tk.Frame): def __init__(self,master): super().__init__(master) #super().__init__() frame_1 = tk.Frame(master, relief="groove", bd=10) Static = tk.Label(frame_1,text=u'test',font=("",12,"bold")) Static.grid(row=0, column=0,padx=5, pady=5) frame_1.grid(sticky=tk.NSEW) if __name__ == "__main__": root=tk.Tk() root.title(u"Test") app = PaFrame(master=root) app.mainloop()
この状態でChFrameのsuper().init(master)をsuper().init()に変更すると、目印にgrooveしていたのですが、親子両方消えてしまいました。
tk.Frameの引数をNoneにすると全体のウィンドウとなると聞き、ChFrameがメインウィンドウに直接貼り付けられてPaFrameのgrooveと重なって表示されるか、PaFrameを引数にしていないのでそもそも貼り付けられず、PaFrameのgrooveのみ表示されるかと想像していたのですが、
答えはサイズのみPaFrameの設定を引き継いでgrooveが消え、ラベルも表示されないという結果になりました。
エラーを吐くか、表示されれば少なくとも親か子のgrooveが残ると考えていた為、何が起こったのかわかりません。
実行順で言えば、PaFrameの上からメインウィンドウに直接ChFrameが変な形で張り付いたのだと思うのですが、どのような処理が行われたのでしょう。
また、話は変わるのですが、PaFrameの方のsuper().init(master)に関しましては引数をNoneにしても何も問題なく動きました。masterがもともと全体のウィンドウ?だから変わらないのかと思いますが、それならば引数にmasterを与えることでどのような効果があるのでしょうか。
以上、2点の回答をよろしくお願いします。
まだ回答がついていません
会員登録して回答してみよう