tkinterのクラス化時におけるsuper().init(master)とsuper().init()の挙動を確認していた時に考えてもよくわからなかった挙動がありましたので質問させていただきます。
元々のプログラムは以下のようなもので、実行するとこうなります
Python
1import tkinter as tk 2 3class PaFrame(tk.Frame): 4 def __init__(self, master): 5 super().__init__(master, relief="groove", bd=10, width=300, height=200) 6 self.propagate(True) 7 self.grid_propagate(False) 8 self.grid(row=0, column=0, sticky=tk.NSEW) 9 10 #フレームの作成 11 self.Frame = ChFrame(master=self) 12 self.Frame.grid(row=0, column=0, sticky=tk.NSEW) 13 14class ChFrame(tk.Frame): 15 def __init__(self,master): 16 super().__init__(master) 17 #super().__init__() 18 frame_1 = tk.Frame(master, relief="groove", bd=10) 19 20 Static = tk.Label(frame_1,text=u'test',font=("",12,"bold")) 21 Static.grid(row=0, column=0,padx=5, pady=5) 22 23 frame_1.grid(sticky=tk.NSEW) 24 25 26if __name__ == "__main__": 27 root=tk.Tk() 28 root.title(u"Test") 29 app = PaFrame(master=root) 30 app.mainloop() 31 32
この状態で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点の回答をよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。