KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
Tkinterで使われるFrameの一覧を活用例を交えて一挙紹介【3種類】

Tkinterで使われるFrameの一覧を活用例を交えて一挙紹介【3種類】

今回はTkinterで使われるFrameの一覧を3種類、活用例を交えて解説いたします。Frameの定義や活用例を学びたい、Frameを利用したコードを確認したい方へおすすめです。是非最後までご覧ください。

目次
  1. そもそもTkinterで使われるFrameとは?
    1. Tkinterの構成要素
    2. Tkinterで使われるFrameを活用するメリット
  2. Tkinterで使われるFrame一覧紹介
    1. frame
    2. labelframe
    3. panedwindow
  3. Frameの配置方法【3種類】
  4. まとめ
  5. 参考文献
目次を開く⬇︎

そもそもTkinterで使われるFrameとは?

Tkinterで使われるFrameとは、1つ以上のWidgetを取りまとめるものを意味します。

言葉だけでは、Frameに関してイメージしづらいですね。。以下の「Tkinterの構成要素」を確認しながら、理解を深めましょう。

Tkinterの構成要素

Tkinterの構成要素として、Window, Frame, Widgetの概念が存在します。

名称説明文
Window  画像のオレンジ色枠の部分になります。Tkinter画面全体を表します。
Frame画像内の紫色枠部分になります。Widgetが1つ以上ある場合に、取りまとめるものです。
Widget青色もしくは黄緑色枠で囲まれる部分になります。1つの機能を持つ最小単位 = Widgetと考えると良いでしょう。

要するに、紫色枠で囲まれる箇所へ、Frame(frame, panedwindowなど)を配置して、Tkinterを実装することになります。

Tkinterで使われるFrameを活用するメリット

Tkinterで使われるFrameを活用すると、

  • 複数のWidgetを1グループにまとめられる
  • 多数のWidgetをまとめることで、管理を容易にする
  • 目的別にWidgetをまとめられて、再利用可能

などが考えられます。

確かに、Frameを活用することで、Widgetの数が多くなった場合に、どのような目的でこのWidgetは作られたのだっけ?と考えることなく、実装できそうです。

Tkinterで使われるFrame一覧紹介

先ほどは「Tkinterの構成要素」をもとに、そもそもTkinterで使われるFrameとは何なのか、解説いたしました。

「Tkinterで使われるFrame一覧紹介」では、各種Frame(frame, panedwindowなど)の定義や使い方を、簡単に紹介していきます。

frame

frameはFrameにラベルをつけないで、1つ以上のWidgetを取りまとめる場合に利用します。

1import tkinter as tk
2
3tk.Frame(option1, option2, ...) or tk.Frame('親要素', option1, option2, ...)

で定義されます。

例えば以下のようなコードを作成すると、

1import tkinter as tk
2
3class Application(tk.Frame):
4    # frameを取得する関数
5    def getFrame(self):
6        # Windowを親要素として、frame Widget(Frame)を作成する。
7        # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
8        frame = tk.Frame(self.master)
9        # Windowを親要素として、frame Widget(Frame)をどのように配置するのか?
10        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
11        frame.pack()
12
13        # frame Widget(Frame)を親要素として、label Widgetを作成する。
14        # text : テキスト情報
15        # width : 幅の設定
16        # bg : 背景色の設定
17        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
18        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
19        label1 = tk.Label(frame, text="test", width=10, bg="#008000")
20        # frame Widget(Frame)を親要素として、label Widgetをどのように配置するのか?
21        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
22        label1.pack()
23
24        # frame Widget(Frame)を親要素として、label Widgetを作成する。
25        # text : テキスト情報
26        # width : 幅の設定
27        # bg : 背景色の設定
28        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
29        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
30        label2 = tk.Label(frame, text="test", width=10, bg="red")
31        # frame Widget(Frame)を親要素として、label Widgetをどのように配置するのか?
32        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
33        label2.pack()
34
35    def __init__(self, master=None):
36        # Windowの初期設定を行う。
37        super().__init__(master)
38        # Windowの画面サイズを設定する。
39        # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
40        self.master.geometry("300x200")
41        self.getFrame()
42
43# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
44if __name__ == "__main__":
45    # Windowを作成する。
46    # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
47    root = tk.Tk()
48    app = Application(master=root)
49
50    # Windowをループさせて、継続的にWindow表示させる。
51    # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
52    app.mainloop()

以下の画像のように、frameを描画します。

frameに関しては、【入門者必見】Tkinterで活用されるframeとは?実用例を通して徹底解説でまとめていますので、詳しく知りたい方は是非ご確認ください。

labelframe

labelframeはFrameにラベルをつけて、1つ以上のWidgetを取りまとめる場合に利用します。

1import tkinter as tk
2
3tk.LabelFrame(option1, option2, ...) or tk.LabelFrame('親要素', option1, option2, ...)

で定義されます。

例えば以下のようなコードを作成すると、

1import tkinter as tk
2
3class Application(tk.Frame):
4    # labelframeを取得する関数
5    def getLabelFrame(self):
6        # Windowを親要素として、labelframe Widget(Frame)を作成する。
7        # text : ラベルの設定。labelframeとする。
8        # LabelFrameについて : https://kuroro.blog/python/ggEa100zNeLfl5nJg1iK/
9        labelframe = tk.LabelFrame(self.master, text='labelframe')
10        # Windowを親要素として、labelframe Widget(Frame)をどのように配置するのか?
11        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
12        labelframe.pack()
13
14        # labelframe Widget(Frame)を親要素として、label Widgetを作成する。
15        # text : テキスト情報
16        # width : 幅の設定
17        # bg : 背景色の設定
18        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
19        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
20        label1 = tk.Label(labelframe, text="test", width=10, bg="#008000")
21        # labelframe Widget(Frame)を親要素として、label Widgetをどのように配置するのか?
22        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
23        label1.pack()
24
25        # labelframe Widget(Frame)を親要素として、label Widgetを作成する。
26        # text : テキスト情報
27        # width : 幅の設定
28        # bg : 背景色の設定
29        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
30        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
31        label2 = tk.Label(labelframe, text="test", width=10, bg="red")
32        # labelframe Widget(Frame)を親要素として、label Widgetをどのように配置するのか?
33        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
34        label2.pack()
35
36    def __init__(self, master=None):
37        # Windowの初期設定を行う。
38        super().__init__(master)
39        # Windowの画面サイズを設定する。
40        # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
41        self.master.geometry("300x200")
42        self.getLabelFrame()
43
44# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
45if __name__ == "__main__":
46    # Windowを作成する。
47    # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
48    root = tk.Tk()
49    app = Application(master=root)
50
51    # Windowをループさせて、継続的にWindow表示させる。
52    # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
53    app.mainloop()

以下の画像のように、labelframeを描画します。

labelframeに関しては、Tkinterで使われるlabelframeとは?活用方法から実用例を徹底解説でまとめていますので、詳しく知りたい方は是非ご確認ください。

panedwindow

panedwindowは1つ以上のWidgetを取りまとめつつ、自由にWidgetの大きさを変更する場合に利用します。

1import tkinter as tk
2
3tk.PanedWindow(option1, option2, ...) or tk.PanedWindow('親要素', option1, option2, ...)

で定義されます。

例えば以下のようなコードを作成すると、

1import tkinter as tk
2
3class Application(tk.Frame):
4    # panedwindowを取得する関数
5    def getPanedWindow(self):
6        # Windowを親要素として、panedwindow Widget(Frame)を作成する。
7        # <用語の説明>
8        # panedwindow Widget(Frame)の中に配置される、Widgetのことを「ペイン」という。
9        # ペインとペインの間の空間を「さっし」という。さっしを選択した状態で、さっしを左右(上下)へ動かすとWidget(ペイン)の大きさを自由に変更できる。
10        # また、さっしの中に表示される、四角いものを「handle」という。handleはさっしと同じ動作を行う。
11        # showhandle : さっしの中へhandleを表示するかどうかの設定。True : 表示する, False : 表示しない。
12        # sashwidth : さっしの幅を設定。
13        # PanedWindowについて : https://kuroro.blog/python/0KVm0XNc0gvKrbM4O9bD/
14        panedWindow = tk.PanedWindow(self.master, showhandle=True, sashwidth=20)
15        # Windowを親要素として、panedwindow Widget(Frame)をどのように配置するのか?
16        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
17        panedWindow.pack()
18
19        # panedwindow Widget(Frame)を親要素として、label Widgetを作成する。
20        # text : テキスト情報
21        # width : 幅の設定
22        # bg : 背景色の設定
23        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
24        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
25        label1 = tk.Label(panedWindow, text="test", width=10, bg="#008000")
26        # panedwindow Widget(Frame)を親要素として、label Widgetをどのように配置するのか?
27        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
28        label1.pack()
29
30        # panedwindow Widget(Frame)を親要素として、label Widgetを作成する。
31        # text : テキスト情報
32        # width : 幅の設定
33        # bg : 背景色の設定
34        # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
35        # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
36        label2 = tk.Label(panedWindow, text="test", width=10, bg="red")
37        # panedwindow Widget(Frame)を親要素として、label Widgetをどのように配置するのか?
38        # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
39        label2.pack()
40
41        # label Widget要素をpanedwindow Widget(Frame)へ格納。ペインとする。
42        # add(Widget) : Widgetをpanedwindow Widget(Frame)へ格納する。
43        panedWindow.add(label1)
44        # label Widget要素をpanedwindow Widget(Frame)へ格納。ペインとする。
45        # add(Widget) : Widgetをpanedwindow Widget(Frame)へ格納する。
46        panedWindow.add(label2)
47
48    def __init__(self, master=None):
49        # Windowの初期設定を行う。
50        super().__init__(master)
51        # Windowの画面サイズを設定する。
52        # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
53        self.master.geometry("300x200")
54        self.getPanedWindow()
55
56# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
57if __name__ == "__main__":
58    # Windowを作成する。
59    # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
60    root = tk.Tk()
61    app = Application(master=root)
62
63    # Windowをループさせて、継続的にWindow表示させる。
64    # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
65    app.mainloop()

以下の画像のように、panedwindowを描画します。

panedwindowに関しては、Tkinterで使うpanedwindowとは?活用方法から各種用語に関して解説でまとめていますので、詳しく知りたい方は是非ご確認ください。

Frameの配置方法【3種類】

先ほどの「Tkinterで使われるFrame一覧紹介」では、各種Frameの定義から使い方を簡単にお伝えしました。

紹介する中の、サンプルコードを確認して、気づいた方もいるかもしれませんが、

  • 各種Frameを宣言するだけではだめ
  • Frameを配置する関数の利用が必要

になります。

TkinterではFrameを配置する関数として、

  • grid
  • pack
  • place

を用意しています。

gridに関しては、【徹底解説!?】Tkinterで使われるgridの活用方法を完全マスター!?でまとめていますので、詳しく知りたい方は是非ご確認ください。

packに関しては、【完全版!?】Tkinterを用いてpackの使い方や実例をわかりやすく解説!?でまとめていますので、詳しく知りたい方は是非ご確認ください。

placeに関しては、Tkinterで使われるplaceとは?サンプルコードを通して完全攻略!?でまとめていますので、詳しく知りたい方は是非ご確認ください。

まとめ

  • Tkinterで使われるFrameとは、1つ以上のWidgetを取りまとめるものを意味します。
  • Frameを宣言するだけでなく、Frameを配置する関数の利用が必要。
  • Frameを配置する関数として、grid, pack, placeが用意される。

参考文献