質問するログイン新規登録

Q&A

解決済

1回答

6154閲覧

Python tkinterで複数のフレームをクラスでつくりたい

soepu

総合スコア41

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

2クリップ

投稿2019/05/16 22:07

1

2

Pythonのtkinterで以下のようなプログラムをつくりました。

Python

1import tkinter as tk 2 3root = tk.Tk() 4root.geometry("300x300") 5frame1 = tk.Frame(root,width = 100,height = 100,bg = "red") 6frame2 = tk.Frame(root,widht = 100,height = 100,bg = "blue") 7 8root.mainloop()

上記を実行すると、rootウィンドウに、frame1、frame2が上下に色違いで配置されます。

これと同じことを、オブジェクト指向(下記プログラム、ネットや参考書などにサンプルとして
記載されていることがある)で書くにはどのようにしたらよいのでしょうか?

Python

1import tkinter as tk 2class App( tk. Frame): 3 def __init__( self, master = None): 4 super().__ init__( master) 5 master. title(" テキスト ボックス 内容 の 取得") 6 master. geometry(" 350 x 150") self. pack() 7 8root = tk.TK() 9root = App(master = root) 10 11root.mainloop()
cuvare3👍を押しています

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

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

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

guest

回答1

0

ベストアンサー

どちらのサンプルも動作しているようには見えませんが・・・

上の方のコードはFrameがレイアウトされておりません。たぶん

Python

1import tkinter as tk 2 3root = tk.Tk() 4root.geometry("300x300") 5frame1 = tk.Frame(root,width=100,height=100,bg="red") 6frame1.pack() 7frame2 = tk.Frame(root,width=100,height=100,bg="blue") 8frame2.pack() 9root.mainloop()

なのでしょうね

で、クラス化した場合は Frame Widgetを継承したいのであれば

Python

1import tkinter as tk 2 3class App(tk.Frame): 4 def __init__(self, master=None, *args, **kwargs): 5 super().__init__(master, *args, **kwargs) 6 self.pack() 7 8root = tk.Tk() 9root.title(" テキスト ボックス 内容 の 取得") 10root.geometry("300x300") 11 12App(master=root, width=100, height=100, bg='red') 13App(master=root, width=100, height=100, bg='blue') 14 15root.mainloop()

のようになるかと思います。

1つのクラスでやりたいのであれば、Frame Widgetを継承せずに

Python

1import tkinter as tk 2 3class App(): 4 def __init__(self, root=None): 5 self.root=root 6 self.root.title(" テキスト ボックス 内容 の 取得") 7 self.root.geometry("300x300") 8 9 self.frame1 = tk.Frame(self.root, width=100, height=100, bg='red') 10 self.frame1.pack() 11 self.frame2 = tk.Frame(self.root, width=100, height=100, bg='blue') 12 self.frame2.pack() 13 14root = tk.Tk() 15App(root) 16 17root.mainloop()

ですかね。

投稿2019/05/16 23:41

magichan

総合スコア15898

soepu

2019/05/17 22:09

複数の対応策、有難う御座います。 やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問