###質問したいこと
TkinterのFrameのサイズ指定の方法についてです。
以下のソースコードの通り実行すると、目的のものは得られるのですが、
Frameのサイズ指定の部分について聞きたいことがあります。
該当のソースコード
Python
1import tkinter as tk 2 3class Frame1(tk.Frame): 4 def __init__(self, master=None): 5 super().__init__(master,width=400, height=300) 6 7 #ウィンドウの設定 8 self.master.geometry("800x600") 9 self.master.title("ウィンドウのタイトル") 10 11 #フレームの設定 12 self.config(bg="black") 13 self.propagate(False) 14 15 #実行内容 16 self.pack() 17 self.create_widget()#下で定義するメソッドを実行 18 19 def create_widget(self): 20 #ラベルを作製 21 self.label1 = tk.Label(self, text="これはラベルです") 22 self.label1.pack() 23 24 #エントリーを作製 25 self.entry1 = tk.Entry(self) 26 self.entry1.insert(tk.END, "これはエントリーです") 27 self.entry1.pack() 28 29 #ボタンを作製 30 self.button1 = tk.Button(self, text="これはボタンです") 31 self.button1.pack() 32 33root = tk.Tk() 34f1 = Frame1(master = root) 35f1.mainloop() 36
聞きたいこと
Python
1class Frame1(tk.Frame): 2 def __init__(self, master=None): 3 super().__init__(master,width=400, height=300) 4 5 #ウィンドウの設定 6 self.master.geometry("800x600") 7 self.master.title("ウィンドウのタイトル") 8 9 #フレームの設定 10 self.config(bg="black") 11 self.propagate(False)
↑のsuper()~~の部分でFrameのサイズを指定していて、
このFrameが配置されるrootのサイズをその下の#ウィンドウの設定の
self.master.geometry("800x600")で行っています。
ここでのselfはインスタンスのことを指しており、
self.masterというのはrootのことを指すから、
root.geometry("800x600")という記述とほぼ同じだと理解しています。
(実際にself.master.geometry("800x600")という記述を消して、root = tk.Tk()の下に
root.geometry("800x600")と記述しても同様に動きました。)
そこで、
Python
1class Frame1(tk.Frame): 2 def __init__(self, master=None): 3 super().__init__(master) 4 5 #ウィンドウの設定 6 self.master.geometry("800x600") 7 self.master.title("ウィンドウのタイトル") 8 9 #フレームの設定 10 self.width = 400 11 self.height = 300 12 self.config(bg="black") 13 self.propagate(False)
と書き換えても同じように動くかと思ったのですが、
Frameが表示されなくなってしまいました。
これはなぜなのでしょうか。
補足情報(FW/ツールのバージョンなど)
Python 3.7.4
tkinter 8.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/25 11:52
2020/04/25 12:35 編集
2020/04/25 12:52