3.1 フレームの作成
(1) フレームは tkinter の「Frame」クラスをインスタンス化することで作成します。
引数
設定するオプションのキーワードの文字列と値を辞書型で指定します。
設定するパラメータの値をキーワードで指定します。
メソッド
Pack クラスメソッド
Place クラスメソッド
Grid クラスメソッド
備考
「Misc」クラスに特殊メソッドの「__setitem__」と「__getitem__」が定義されていて、オブジェクトからキーワードインデックスでオプションの値を設定、取得することができます。同様に、特殊メソッドの「__str__」が定義されていて、「str」関数でオブジェクトのパス名を取得することができます。
「cnf」と「**kw」引数の両方を用いてオプションを設定することができます。それぞれの引数で同じオプションに別の値を設定すると「**kw」引数での設定値が有効になります。
「Frame」クラスからインスタンスオブジェクトを作成し、任意の変数に代入します。ここでは 「frame」としています。オブジェクトを代入した変数は、後にこのウィジェットを操作するために用います。フレームを配置するオブジェクトを、ここではメインウィンドウにしています。引数「master」にメインウィンドウのオブジェクト「root」を指定します。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
frame=tk.Frame(root) | |
root.mainloop() |
このプログラムを実行しても、フレームは表示されません。他のウィジェットの場合も同様ですが、フレームを表示するには表示するためのメソッドを実行する必要があります。
(2) ウイジェットを表示するメソッドは Pack クラス、Place クラス、Grid クラスに用意されていて、用途によってそれぞれのクラスメソッドを使用します。これらのクラスのメソッドは基本的に混在して使用することができません。以下に概要について説明します。各クラスのメソッドの使い方の詳細については後述の各章を参照して下さい。
(2.1)pack メソッド
Pack クラスの「pack」メソッドは、親ウィジェット上に自ウィジェットを詰め込むメソッドです。このとき、親ウィジェットのサイズは子ウィジェットを包含する最小サイズに変更されます。ただし、親ウィジェットのサイズが「wm_geometry」メソッドで設定されている場合や「place」メソッドで設定されている場合は変更されません。ウィジェットの配置は、デフォルトで「pack」メソッドを実行したウィジェットから順に上から配置されます。
次のプログラムは「root」ウィンドウ上に3個のフレームウィジェットを作成して「pack」メソッドで配置しています。各フレームには「赤」、「緑」、「青」の背景色を設定しています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
frame_1 = tk.Frame(root, width=80, height=50, bg='red') | |
frame_2 = tk.Frame(root, width=80, height=50, bg='green') | |
frame_3 = tk.Frame(root, width=80, height=50, bg='blue') | |
frame_1.pack() | |
frame_2.pack() | |
frame_3.pack() | |
root.mainloop() |
このプログラムを実行すると、下図のようにウィンドウに上から順にフレームウィジェットが表示されます。
(2.2)grid メソッド
Grid クラスの「grid」メソッドは、親ウィジェットを表のような構造の複数のセルに分割し、各セルにウィジェットを配置するメソッドです。「grid」メソッドで列と行を指定した位置にウィジェットが配置されます。このとき、親ウィジェットのサイズは子ウィジェットを包含する最小サイズに変更されます。ただし、親ウィジェットのサイズが「wm_geometry」メソッドで設定されている場合や「place」メソッドで設定されている場合は変更されません。
次のプログラムは「root」ウィンドウ上に3個のフレームウィジェットを作成して「grid」メソッドで配置しています。各フレームには「赤」、「緑」、「青」の背景色を設定しています。ウィジェットを配置する位置は「grid」メソッドのキーワード引数で、「列」は「column」、行は「row」の整数値で指定します。列および行を指定する値は「0」から始まります。「frame_1」を1列目の1行目に、「frame_2」を2列目の2行目に、「frame_3」を3列目の3行目にに配置しています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
frame_1 = tk.Frame(root, width=80, height=50, bg='red') | |
frame_2 = tk.Frame(root, width=80, height=50, bg='green') | |
frame_3 = tk.Frame(root, width=80, height=50, bg='blue') | |
frame_1.grid(column=0, row=0) | |
frame_2.grid(column=1, row=1) | |
frame_3.grid(column=2, row=2) | |
root.mainloop() |
このプログラムを実行すると、下図のようにウィンドウに指定した配置でフレームウィジェットが表示されます。
(2.3)place メソッド
Place クラスの「place」メソッドは、親ウィジェット上の座標を指定して、その座標にウィジェットの左上端を配置するメソッドです。親ウィジェットのサイズは変更されません。
次のプログラムは「root」ウィンドウ上に3個のフレームウィジェットを作成して「place」メソッドで配置しています。各フレームには「赤」、「緑」、「青」の背景色を設定しています。ウィジェットを配置する座標は「place」メソッドのキーワード引数で、「横」は「x」、縦は「y」の整数値でピクセル単位に指定します。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
frame_1 = tk.Frame(root, width=80, height=50, bg='red') | |
frame_2 = tk.Frame(root, width=80, height=50, bg='green') | |
frame_3 = tk.Frame(root, width=80, height=50, bg='blue') | |
frame_1.place(x=0, y=0) | |
frame_2.place(x=100, y=60) | |
frame_3.place(x=200, y=120) | |
root.mainloop() |
このプログラムを実行すると、下図のようにウィンドウに指定した座標にフレームウィジェットが表示されます。