質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1508閲覧

Tkinterのクラス化時におけるsuper().__init__について

NKJSM

総合スコア58

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/12 00:51

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点の回答をよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

すいません。一つ目に関しましては自己解決しました。
frame_1 = tk.Frame(master, relief="groove", bd=10)でmasterを指定しているのでPaFrameに張り付けた後何も書いていないChFrameを張り付けてるんですね、master->selfで予想した感じの結果が得られました。。。

恐縮ですが、二つ目の親フレームにおけるsuperの引数の件と、認識が間違っているかどうかの回答だけ頂けるとありがたいです。

投稿2021/11/12 01:03

NKJSM

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問