PythonでGUIアプリを作成できるモジュール tkinter(ティーキンター)の Frame(フレーム) について解説します。
サンプルコードはモジュールのインポートを from tkinter import *
としています。
関数を呼び出す際にパッケージ名の接頭辞 (tk.Frame()
のtk.
)を省略できるのでおすすめです。
Frameとは
Frame とは四角形のコンテナ(入れ物)です。
この Frame の中に Widget(ラベル・ボタン)などを配置することでグループ化します。
Frame のオプション一覧
Frame で指定可能なオプション一覧です。
オプション | 説明 | 値の形式 |
---|---|---|
width | フレームの幅 | ピクセル値 |
height | フレームの高さ | ピクセル値 |
bg (background) | 背景色 | 色名または16進数カラーコード |
relief | 枠線タイプ(デフォルト値はflat) bd とセットで設定 | flat, solid, groove, raised, ridge, sunken |
bd (borderwidth) | 枠線の幅(デフォルトは2px) relief とセットで設定 | ピクセル値 |
padx | フレーム内に水平方向のスペースを追加 | ピクセル値 |
pady | フレーム内に垂直方向のスペースを追加 | ピクセル値 |
cursor | マウスオーバー時のカーソルタイプ | カーソルタイプ |
highlightthickness | フォーカスハイライト枠線幅 | ピクセル値 |
highlightbackground | 非フォーカス時のハイライト枠線色 | 色名または16進数カラーコード |
highlightcolor | フォーカス時のハイライト枠線色 | 色名または16進数カラーコード |
幅・高さ(width, height)
Frame の幅、高さは width
, height
をピクセルで指定します。
1 2 3 4 5 6 7 8 | from tkinter import * root = Tk() # Frame配置 frame = Frame(root, width=200, height=200) frame.pack() root.mainloop() |
背景色(bg)
Frame の背景色 bg
は、色名か16進数カラーコードを指定します。
・参考サイト:色の名前とカラーコードが一目でわかるWEB色見本 原色大辞典
1 2 3 | frame1 = Frame(root, width=200, height=200, bg='green') frame2 = Frame(root, width=200, height=200, bg='skyblue') frame3 = Frame(root, width=200, height=200, bg='#ffffff') |
枠線(relief, bd)
relief
は Frame の枠線スタイル、bd
で枠線の太さを指定します。
1 | frame1 = Frame(root, width=200, height=200, bd=5, relief='solid') |
枠線タイプとサンプルです。
サンプル | タイプ |
---|---|
flat | |
solid | |
groove | |
raised | |
ridge | |
sunken |
フレーム内スペース(padx, pady)
padx
, pady
で Frame 内に水平・垂直方向のスペースを設定できます。
1 | frame1 = Frame(root, padx=50, pady=50) |
設定すると右側のように Widget に対してスペースが確保されます。
カーソル(cursor)
cursor
を指定する事で、Frameにマウスオーバーした時にマウスカーソルのアイコンを変更できます。
1 | frame1 = Frame(root, width=200, height=200, cursor='hand2') |
カーソルのタイプは全部で75個ありますが、実際に使えそうなものは限られています。
以下がサンプルになります。全タイプを確認したい場合はこちらのサイトで確認できます。
アイコン | タイプ |
---|---|
arrow | |
center_ptr | |
circle | |
crosshair | |
draft_large | |
draft_small | |
left_ptr | |
hand1 | |
hand2 | |
tcross | |
top_left_arrow | |
X_cursor |
フォーカスハイライト
Frameのフォーカス状態に応じて枠をハイライトします。
サンプルでは、非フォーカス時 highlightbackground
に青、フォーカス時 highlightcolor
に赤を設定しています。線の幅 highlightthickness
は共通設定です。
ハイライトの色は、色名か16進数カラーコードを指定します。
・参考サイト:色の名前とカラーコードが一目でわかるWEB色見本 原色大辞典
1 2 3 | frame1 = Frame(root, width=100, height=100, highlightthickness=5, highlightbackground='blue', highlightcolor='red') frame2 = Frame(root, width=100, height=100, highlightthickness=5, highlightbackground='blue', highlightcolor='red') frame3 = Frame(root, width=100, height=100, highlightthickness=5, highlightbackground='blue', highlightcolor='red') |
フォーカスは「Tab」キーで選択可能な Widget にのみ移ります。選択不可のラベル等にはフォーカスできません。
幅・高さを固定(propagate)
Frame のサイズを指定しても widget を配置すると、下図のようにwidget に合わせて自動的に伸縮してしまいます。(分かりやすいようにFrame に枠線を付けてます)
指定したサイズで Frame を固定したい場合は frame.propagate(False)
を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from tkinter import * root = Tk() # Frame設定 frame1 = Frame(root, width=200, height=200, borderwidth=1, relief='solid') frame2 = Frame(root, width=200, height=200, borderwidth=1, relief='solid') frame3 = Frame(root, width=200, height=200, borderwidth=1, relief='solid') # Frameサイズ固定 frame1.propagate(False) frame2.propagate(False) frame3.propagate(False) # Frame配置 frame1.pack(side=LEFT) frame2.pack(side=LEFT) frame3.pack(side=LEFT) # Widget配置 label = Label(frame1, text='label') label.pack() button = Button(frame2, text='Button') button.pack() entry = Entry(frame3) entry.pack() root.mainloop() |
他にもtkinterの使い方を解説しています。
・関連記事:PythonでGUIアプリを作成する(tkinter)
・関連記事:【Python/tkinter】Widgetの配置(grid)
・関連記事:【Python/tkinter】Widgetの配置(pack)
・関連記事:【Python/tkinter】Widgetの配置(place)