◀ 第 4 章 ラベルフレーム   【目  次】  4. 2 オプションパラメータ ▶

999999

 更新日:


 このホームページは Amazon Kindle 本の作成中の草稿です。日々、原稿を見直しているので、内容が変わることに留意して読んで下さい。本が出版され次第、このホームページは削除されます。

4.1 ラベルフレームの作成

(1)ラベルフレームは tkinter の「LabelFrame」クラスをインスタンス化することで作成します。

tkinter.LabelFrame(master=None, cnf={}, **kw)
ラベルフレームウィジェットのクラス定義です。「Misc」クラス、「Pack」クラス、「Place」クラス、「Grid」クラスを継承しています。

引数
master
ラベルフレームを配置するオブジェクトを指定します。省略または「None」を指定するとメインウィンドウが設定されます。
cnf

設定するオプションのキーワードの文字列と値を辞書型で指定します。

**kw

設定するパラメータの値をキーワードで指定します。


メソッド
destroy()
このオブジェクトとオブジェクト上のすべてのウィジェットを破棄します。オブジェクトが存在しなくてもエラーは返されません。
getdouble(x)
引数「x」に指定した数値および数文字を浮動小数点に変換します。Python 組み込み関数「float」と同じです。
getint(x)
引数「x」に指定した整数値および整数文字を整数値に変換します。Python 組み込み関数「int」に似ていますが、小数点数値は整数値に変換しません。n 進数の変換は、n 進記号表示の文字列を指定します。
Misc クラスメソッド
Pack クラスメソッド
Place クラスメソッド
Grid クラスメソッド

備考

Misc」クラスに特殊メソッドの「__setitem__」と「__getitem__」が定義されていて、オブジェクトからキーワードインデックスでオプションの値を設定、取得することができます。同様に、特殊メソッドの「__str__」が定義されていて、「str」関数でオブジェクトのパス名を取得することができます。

「cnf」と「**kw」引数の両方を用いてオプションを設定することができます。それぞれの引数で同じオプションに別の値を設定すると「**kw」引数での設定値が有効になります。

「LabelFrame」クラスからインスタンスオブジェクトを作成し、任意の変数に代入します。ここでは 「labelframe」としています。オブジェクトを代入した変数は、後にこのウィジェットを操作するために用います。フレームを配置するオブジェクトを、ここではメインウィンドウにしています。引数「master」にメインウィンドウのオブジェクト「root」を指定します。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
labelframe = tk.LabelFrame(root)
5
root.mainloop()

このプログラムを実行しても、ラベルフレームは表示されません。フレームと同様に表示するためのメソッドを実行する必要があります。

(2)ウイジェットを表示するメソッドは Pack クラス、Place クラス、Grid クラスに用意されていて、用途によってそれぞれのクラスメソッドを使用します。これらのクラスのメソッドは基本的に混在して使用することができません。以下に概要について説明します。各クラスのメソッドの使い方の詳細については後述の各章を参照して下さい。

 (2.1)pack メソッド

Pack クラスの「pack」メソッドは、親ウィジェット上に自ウィジェットを詰め込むメソッドです。このとき、親ウィジェットのサイズは子ウィジェットを包含する最小サイズに変更されます。ただし、親ウィジェットのサイズが「wm_geometry」メソッドで設定されている場合や「place」メソッドで設定されている場合は変更されません。ウィジェットの配置は、デフォルトで「pack」メソッドを実行したウィジェットから順に上から配置されます。

次のプログラムは「root」ウィンドウ上に3個のラベルフレームウィジェットを作成して「pack」メソッドで配置しています。各ラベルフレームには「赤」、「緑」、「青」の背景色を設定しています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
labelframe_1 = tk.LabelFrame(root, width=80, height=50, bg='red')
5
labelframe_2 = tk.LabelFrame(root, width=80, height=50, bg='green')
6
labelframe_3 = tk.LabelFrame(root, width=80, height=50, bg='blue')
7
labelframe_1.pack()
8
labelframe_2.pack()
9
labelframe_3.pack()
10
root.mainloop()

このプログラムを実行すると、下図のようにウィンドウに上から順にラベルフレームウィジェットが表示されます。

A004_LabelFrame_04-1

 (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行目にに配置しています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
labelframe_1 = tk.LabelFrame(root, width=80, height=50, bg='red')
5
labelframe_2 = tk.LabelFrame(root, width=80, height=50, bg='green')
6
labelframe_3 = tk.LabelFrame(root, width=80, height=50, bg='blue')
7
labelframe_1.grid(column=0, row=0)
8
labelframe_2.grid(column=1, row=1)
9
labelframe_3.grid(column=2, row=2)
10
root.mainloop()

このプログラムを実行すると、下図のようにウィンドウに指定した配置でラベルフレームウィジェットが表示されます。

A004_Frame_04-1-2

 (2.3)place メソッド

Place クラスの「place」メソッドは、親ウィジェット上の座標を指定して、その座標にウィジェットの左上端を配置するメソッドです。親ウィジェットのサイズは変更されません。

次のプログラムは「root」ウィンドウ上に3個のラベルフレームウィジェットを作成して「place」メソッドで配置しています。各フレームには「赤」、「緑」、「青」の背景色を設定しています。ウィジェットを配置する座標は「place」メソッドのキーワード引数で、「横」は「x」、縦は「y」の整数値でピクセル単位に指定します。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
labelframe_1 = tk.LabelFrame(root, width=80, height=50, bg='red')
5
labelframe_2 = tk.LabelFrame(root, width=80, height=50, bg='green')
6
labelframe_3 = tk.LabelFrame(root, width=80, height=50, bg='blue')
7
labelframe_1.place(x=0, y=0)
8
labelframe_2.place(x=100, y=60)
9
labelframe_3.place(x=200, y=120)
10
root.mainloop()

このプログラムを実行すると、下図のようにウィンドウに指定した座標にラベルフレームウィジェットが表示されます。

A004_Frame_04-1-3

  "