【Python】Tkinterのフレームを使ってグループ化する方法

Tkinterでウィンドウの部品配置に用いられるフレームについて解説します。

フレームはウィジェットのグループ化に役立つため、ウィジェットを論理的なまとまりにまとめることができます!!

フレームを作成しグループ化する方法

Tkinterをインポートしウィンドウを作成してください。

import tkinter as tk

root = tk.Tk()
root.title("Frame")
root.geometry('300x300')

root.mainloop()

ウィンドウの作成方法に関しては下記の記事でまとめていますのでこちらをご覧ください。

ウィジェットを作成したら、’Frame()’クラスを使用して、ルートウィンドウに’frame’という名前のフレームを作成ます。

frame = tk.Frame(root, bd=2, relief=tk.GROOVE)
frame.pack(padx=5, pady=5)

引数には、親ウィンドウを指定(root)し、’bd’で境界線の太さ、’relief’で境界線のスタイルを指定しています。

詳しい’Frame()’クラスの引数はこの後紹介します。

‘Frame()’クラスを作成したとは、配置するための’pack()’メソッド使っています。

しかしこの状態で実行してもフレームは表示されません。

import tkinter as tk

root = tk.Tk()
root.title("Frame")
root.geometry('300x300')

frame = tk.Frame(root, bd=2, relief=tk.GROOVE)
frame.pack(padx=5, pady=5)

root.mainloop()
実行結果

このコードでは、フレームに配置する要素が何もないため、フレーム自体が表示されません。

フレームに表示するためには、ラベル、ボタン、テキストボックスなどのウィジェットをフレームに追加することで表示されます。

以下のようにフレームにラベルを追加します。

import tkinter as tk

root = tk.Tk()
root.title("Frame")
root.geometry('300x300')

frame = tk.Frame(root, bd=2, relief=tk.GROOVE)
frame.pack(padx=5, pady=5)

label = tk.Label(frame, text='Hello, World!')
label.pack(padx=10, pady=10)

root.mainloop()

‘label()’クラスを使いラベルを作成し引数に’frame’を指定することでラベルをフレームに追加することが出来ます。

これでフレーム内に’Hello, World!’と表示されます。

実行結果

Frame()クラスの引数を覚えよう

‘Frame()’クラスの引数は以下の通りです。

  • ‘master’-このフレームを配置するウィンドウまたはフレームの親要素
  • ‘bg’-フレームの背景色を指定
  • ‘bd’-フレームの境界線の太さを指定
  • ‘width’-フレームの幅を指定
  • ‘height’-フレームの高さを指定
  • ‘highlightbackground’-フレームの境界線の色を指定
  • ‘highlightcolor’-フレームにフォーカスが当たった時の色を指定
  • ‘highlightthickness’-フレームにフォーカスが当たった時の境界線の太さを指定
  • ‘relief’-フレームの境界線のスタイルを指定 (デフォルトは’tk.FLAT’)
  • ‘takefocus’-フレームがフォーカスを受け取ることができるかどうかを指定
  • ‘text’-フレームに表示されるテキストを指定
  • ‘font’-フレームに表示されるテキストのフォントを指定

フレームの色や太さを変えることでグループ化したレイアウトの見栄えを変えることが出来るのでフレームの幅・高さの指定方法や色を変える方法などは覚えておくことをおすすめします。