Pythonの標準ライブラリであるtkinterから簡易なデスクトップアプリ開発に挑戦する人も多いと思います。
ここでは、以下の悩みをお持ちの方に読み進めていただきたいです。
- コマンドプロンプトが使いづらく自作ツールを作成したい
- tkinterによるデスクトップアプリ開発に挑戦したい
- tkinterの公式ドキュメントが分かりづらい
これらの悩みを解決しながら、具体的なtkinterの使い方と各ウィジェットを解説します。
tkinterとは
tkinterは、Pythonに標準で搭載されているGUI(Graphical User Interface)ライブラリです。
PythonからTcl/TkというGUIツールキットを使えるようにしたインターフェースです。
ボタンやラベル/テキストボックスなどウィジェットを使い、デスクトップアプリケーションを作成できます。
Python3.xではimport tkinterで利用します(Python2.x:import Tkinter)。
tkinterの特徴
以下は、tkinterの特徴になります。
特徴 | 概要 |
---|---|
標準ライブラリ | Python標準搭載のためインストール不要 |
クロスプラットフォーム | WindowsOS/macOS/Linuxなどで動作 |
シンプルな記述 | 少量なコードでGUI開発可能 |
豊富なウィジェット | 多彩なウィジェット提供 |
イベント駆動型 | イベントに応じた処理可能 |
特にPython初学者の場合、初めてのデスクトップ用ライブラリとしてtkinterは利用しやすく学ぶ上でもおすすめです。
tkinterによる最小構成GUIデスクトップアプリ
ここでは、最小構成のGUIアプリを記載します。
import tkinter as tk
root = tk.Tk() # メインウィンドウの作成
root.title("サンプルGUI") # タイトル設定
root.geometry("300x200") # ウィンドウサイズ設定
label = tk.Label(root, text="こんにちは、tkinter!")
label.pack()
root.mainloop() # イベントループ開始
最小構成で実行したアプリをもとに様々なウィジェット配置とイベント関数を追加することで、様々なデスクトップアプリを実現できます。
tkinter/ttk/ttkbootstrapについて
tkinterの派生ライブラリとして、ttkとttkbootstrapが存在します。

また、以下の項目において比較表を参考に利用してみてください。
比較項目 | tkinter | ttk | ttkbootstrap |
---|---|---|---|
デザイン性 | |||
カスタマイズ性 | |||
ウィジェットの種類 | |||
ドキュメント/情報量 | |||
実装の手軽さ | |||
モダン対応 |
tkinterの使い方
ここでは、tkinterを利用する上での基本的な使い方を解説します。
- tkinterによるレイアウト(ウィジェット配置)方法
- tkinterの代表的なウィジェット
特にウィジェット配置を的確に実施できないとレイアウトが崩れ、開発のモチベーションも下がります。
整理されたレイアウトを実現するために理解しておくとよいでしょう。
tkinterによるレイアウト(ウィジェット配置)方法

tkinterには、3種類のレイアウト(ウィジェット配置)方法があります。
メソッド | 説明 |
---|---|
.pack() | 自動的に上下または左右に詰めて配置 |
.grid() | 行・列を指定して配置、表形式のレイアウトに最適 |
.place() | ピクセル単位での絶対位置指定 |
.grid()によるレイアウト方法は行列を指定し配置するため、ウィンドウサイズに合わせ表形式のレイアウトが実現できておすすめです。
.pack()
.pack()は、tkinterでウィジェットをウィンドウに配置するためのレイアウトマネージャーの1つです。
ウィジェットを上・下・左・右方向に順番に積み重ねる形で自動配置します。
シンプルなUIに向いており、引数を使って配置位置や余白などを細かく調整できます。
引数名 | 説明 |
---|---|
side | ウィジェットを配置する方角(top、bottom、left、right) |
fill | ウィジェットをどの方向に拡張するか(x、y、both、none) |
expand | 空きスペースをウィジェットに与えるか(Trueで拡張される) |
padx | ウィジェットの左右に追加する余白(ピクセル単位) |
pady | ウィジェットの上下に追加する余白(ピクセル単位) |
ipadx | ウィジェット内部の左右に追加する余白(ピクセル単位) |
ipady | ウィジェット内部の上下に追加する余白(ピクセル単位) |
anchor | 配置位置を細かく指定(例:n、ne、center など) |
before | 指定ウィジェットの前に配置 |
after | 指定ウィジェットの後に配置 |
in_ | 配置先ウィジェットを指定(通常は親ウィジェット) |
import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text="こんにちは", bg="lightblue")
label.pack(side="top", fill="x", padx=10, pady=5, ipadx=20, ipady=10, anchor="n")
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
side=”top” | side | 上方向に配置 |
fill=”x” | fill | 横方向にウィジェットを広げる |
padx=10 | padx | 左右に10ピクセルの外部余白 |
pady=5 | pady | 上下に5ピクセルの外部余白 |
ipadx=20 | ipadx | 内側左右に20ピクセルの余白 |
ipady=10 | ipady | 内側上下に10ピクセルの余白 |
anchor=”n” | anchor | 上寄せ(north)で配置 |
.grid()
.grid()は、ウィジェットを行(row)と列(column)の格子状レイアウトで配置する方法です。
細かい位置指定や、ウィジェットの結合・余白調整などが可能で、複雑なUIに向いています。
他のレイアウト(例:.pack())と同じ親ウィジェット内では併用不可です。
引数名 | 説明 |
---|---|
row | 配置する行番号(0から始まる) |
column | 配置する列番号(0から始まる) |
rowspan | 複数行にまたがって配置する |
columnspan | 複数列にまたがって配置する |
sticky | ウィジェットをセル内のどこに揃えるか(例:n、e、w、sなど) |
padx | セルとウィジェットの左右の外部余白 |
pady | セルとウィジェットの上下の外部余白 |
ipadx | ウィジェットの内部左右の余白 |
ipady | ウィジェットの内部上下の余白 |
in_ | 配置先の親ウィジェットを明示的に指定 |
import tkinter as tk
root = tk.Tk()
label1 = tk.Label(root, text="ユーザー名")
label1.grid(row=0, column=0, sticky="e", padx=5, pady=5)
entry1 = tk.Entry(root)
entry1.grid(row=0, column=1, padx=5, pady=5, ipadx=20)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
row=0 | row | 最初の行に配置 |
column=0/column=1 | column | 左(0列目)と右(1列目)に配置 |
sticky=”e” | sticky | セル内で右寄せ(east)に配置 |
padx=5, pady=5 | padx, pady | 各方向に5ピクセルの外部余白 |
ipadx=20 | ipadx | 内側左右に20ピクセルの余白(エントリーフィールドの幅) |
.grid()は柔軟性が高いため、フォームや設定画面のように多要素を整然と並べたいUIに特に有効です。
さらに複雑なグリッド制御(行・列の比率)には.grid_rowconfigure()や.grid_columnconfigure()も活用できます。
.grid_rowconfigure()及び.grid_columnconfigure()は、親ウィジェット内の特定の行・列に対する配置挙動(重みや最小サイズなど)を設定するメソッドです。
主にweightを使って空間の分配比率を調整し、ウィンドウサイズ変更時のリサイズ挙動を制御します。
複数行・列にわたって柔軟なレイアウトを設計する際に非常に便利です。
引数名 | 説明 |
---|---|
index | 対象とする行または列の番号(0から) |
weight | 空きスペースを受け取る割合(0: 拡張しない, 1以上:拡張比率) |
minsize | 最小サイズ(ピクセル) |
pad | 行または列の余白(ピクセル) |
uniform | 同じuniform名の行/列を同じサイズで均等配分 |
import tkinter as tk
root = tk.Tk()
root.geometry("300x150")
# ウィジェット配置
tk.Label(root, text="上").grid(row=0, column=0, sticky="nsew")
tk.Label(root, text="下").grid(row=1, column=0, sticky="nsew")
# 行のサイズ調整(比率と最小サイズ)
root.grid_rowconfigure(0, weight=1, minsize=50)
root.grid_rowconfigure(1, weight=2, minsize=50)
# 列のサイズ調整(比率)
root.grid_columnconfigure(0, weight=1)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
grid_rowconfigure(0, weight=1) | weight(行0) | 上側の行が空間を1の比率で受け取る(下より小さくなる) |
grid_rowconfigure(1, weight=2) | weight(行1) | 下側の行が空間を2の比率で受け取る(上より大きくなる) |
minsize=50 | minsize | 各行の高さの最小値を50ピクセルに固定 |
grid_columnconfigure(0, weight=1) | weight(列) | 列がウィンドウサイズ変更時に幅を伸ばす |
.grid_rowconfigure()/.grid_columnconfigure()を併用することで、ウィンドウサイズに応じた自動リサイズ可能なUIを構築できます。
フォームやダッシュボードなど、動的に変化するUIを作る際に不可欠です。
.place()
.place() は、ウィジェットを座標(x, y)や相対位置(relx, rely)で正確に指定して配置できる方法です。
ウィジェットの絶対的な位置とサイズを細かく制御したい場合に有効です。
ただし、動的なリサイズやレスポンシブなUIには向かず、固定サイズのUIで主に使用されます。
引数名 | 説明 |
---|---|
x | 親ウィジェットの左上からの絶対x座標(ピクセル) |
y | 親ウィジェットの左上からの絶対y座標(ピクセル) |
relx | 親ウィジェット幅に対する相対x位置(0.0~1.0) |
rely | 親ウィジェット高さに対する相対y位置(0.0~1.0) |
width | ウィジェットの固定高さ(ピクセル) |
height | ウィジェットの固定高さ(ピクセル) |
relwidth | 親ウィジェット幅に対する相対幅(0.0~1.0) |
relheight | 親ウィジェット高さに対する相対高さ(0.0~1.0) |
anchor | 配置基準点の指定(”n”, “ne”, “center” など) |
in_ | 配置先ウィジェットの明示的な指定 |
import tkinter as tk
root = tk.Tk()
root.geometry("300x200")
label = tk.Label(root, text="Hello", bg="lightgreen")
label.place(x=50, y=30, width=100, height=50, anchor="nw")
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
x=50 | x | 親ウィジェットの左上から右へ50ピクセルの位置に配置 |
y=30 | y | 親ウィジェットの左上から下へ30ピクセルの位置に配置 |
width=100 | width | ラベルの幅を100ピクセルに指定 |
height=50 | height | ラベルの高さを50ピクセルに指定 |
anchor=”nw” | anchor | ウィジェットの左上(north-west)を基準点として配置 |
tkinterのウィジェット一覧
以下は、tkiterで利用できる各ウィジェットになります。
ウィジェット名 | 説明 |
---|---|
Button | 押すことでイベントを発生させるボタン |
Canvas | 図形描画や画像表示ができる描画領域 |
Checkbutton | 複数選択可能なチェックボックス |
Entry | 1行のテキストを入力するフィールド |
Frame | 複数のウィジェットをグループ化するコンテナ |
Label | テキストや画像を表示するラベル |
LabelFrame | 枠付きラベル付きのコンテナ |
Listbox | 複数の選択肢から項目を選べるリスト |
Menu | メニューバーやプルダウンメニューを作成する |
Menubutton | メニューを表示するためのボタン |
Message | 自動改行付きのテキストを表示するラベル |
OptionMenu | ドロップダウン形式の選択メニュー |
PanedWindow | ウィンドウを分割して複数の領域を持たせるコンテナ |
Radiobutton | 排他的な選択肢を提供するラジオボタン |
Scale | スライダーで数値を選択するウィジェット |
Scrollbar | スクロール機能を提供するバー |
Spinbox | 数値や項目を順送りで選択できる入力欄 |
Text | 複数行のテキストを表示・編集できるウィジェット |
Toplevel | 独立した新しいウィンドウを作成する |
PhotoImage | PNGやGIFなどの画像を扱うための画像オブジェクト |
各ウィジェットに利用する引数も解説します。
また、各ウィジェットを生成するコードと引数に対する具体的な入力といった具体的な例も記載します。
Button(ボタン)
Buttonは、ユーザーがクリックできる標準的なボタンを生成します。
押下時はcommand引数で関数を指定して実行します。
テキスト、画像、色、状態などを自由にカスタマイズできます。
引数名 | 説明 |
---|---|
text | ボタンに表示する文字列 |
command | ボタンがクリックされたときに呼び出す関数 |
image | ボタンに表示する画像(PhotoImageオブジェクト) |
compound | textとimageの配置位置(例:”top”, “left”など) |
state | ボタンの状態(”normal”, “disabled”, “active”) |
bg/background | ボタンの背景色 |
fg/foreground | ボタンの文字色 |
font | テキストのフォント(例:(“Arial”, 12)) |
width | ボタンの幅(文字数またはピクセル、指定方法により異なる) |
height | ボタンの高さ(文字数またはピクセル) |
relief | ボタンの縁取りスタイル(”flat”, “raised”, “sunken”など) |
padx/pady | ボタン内側の左右/上下パディング(スペース) |
anchor | テキストの表示位置(例:”w”=左寄せ、”center”=中央) |
cursor | ホバー時に表示するカーソルの形(例:”hand2″) |
underline | 指定した文字インデックスに下線を引く |
takefocus | タブキーによるフォーカス移動の対象にするか(True or False) |
highlightthickness | フォーカス時の枠線の太さ |
import tkinter as tk
def on_click():
print("ボタンがクリックされました!")
root = tk.Tk()
root.title("Button例")
button = tk.Button(
root,
text="クリックしてね", # ← text 引数
command=on_click, # ← command 引数
bg="lightblue", # ← 背景色
fg="darkblue", # ← 文字色
font=("Arial", 14), # ← フォント
width=20, # ← 幅(文字数ベース)
height=2, # ← 高さ(文字数ベース)
relief="raised", # ← 縁取りスタイル
cursor="hand2" # ← ホバー時カーソル
)
button.pack(pady=20)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
text=”クリックしてね” | text | ボタンに表示される文字列 |
command=on_click | command | クリック時に実行する関数を指定 |
bg=”lightblue” | bg | 背景色を指定 |
fg=”darkblue” | fg | 文字色を指定 |
font=(“Arial”, 14) | font | テキストのフォントとサイズを指定 |
width=20 | width | ボタンの幅(文字数ベース)を指定 |
height=2 | height | ボタンの高さ(文字数ベース)を指定 |
relief=”raised” | relief | ボタンの立体感(縁取り)を指定 |
cursor=”hand2″ | cursor | マウスオーバー時のカーソル形状を指定 |
Canvas(キャンバス)
Canvasは、図形の描画や画像表示、カスタムグラフィックスに使われる領域です。
矩形・線・楕円・テキスト・画像などを座標指定で自由に描画できます。
アニメーションやドラッグ操作など高度なGUI機能の実装にも利用されます。
引数名 | 説明 |
---|---|
width | キャンバスの横幅(ピクセル単位) |
height | キャンバスの縦幅(ピクセル単位) |
bg/background | 背景色を指定 |
bd/borderwidth | 境界線の幅(デフォルトは2) |
highlightthickness | フォーカス時の枠線の太さ(通常は1〜2) |
relief | 縁取りスタイル(”flat”, “ridge”, “sunken” など) |
scrollregion | スクロール可能な仮想領域の範囲(例:(0, 0, 1000, 1000)) |
xscrollcommand | 横スクロールバーと連携するコマンド |
yscrollcommand | 縦スクロールバーと連携するコマンド |
cursor | マウスオーバー時のカーソル形状(例:”cross”) |
confine | 領域外の描画を制限するかどうか(True/False) |
selectbackground | 選択範囲の背景色(アイテム選択時) |
selectborderwidth | 選択アイテムの枠線幅 |
takefocus | フォーカス移動の対象にするか(True/False) |
name | ウィジェットの名前(ID) |
class_ | ウィジェットのクラス名(スタイル定義で使用) |
import tkinter as tk
root = tk.Tk()
root.title("Canvas例")
canvas = tk.Canvas(
root,
width=300, # ← width 引数:幅を300pxに設定
height=200, # ← height 引数:高さを200pxに設定
bg="white", # ← bg 引数:背景色を白に
bd=2, # ← bd 引数:境界線の太さ
relief="sunken", # ← relief 引数:凹んだ見た目
cursor="cross" # ← cursor 引数:クロスカーソル
)
canvas.pack(padx=20, pady=20)
# キャンバス上に図形を描く
canvas.create_rectangle(50, 50, 150, 120, fill="skyblue")
canvas.create_text(100, 85, text="四角形", font=("Arial", 12))
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
width=300 | width | キャンバスの幅を300ピクセルに設定 |
height=200 | height | キャンバスの高さを200ピクセルに設定 |
bg=”white” | bg | 背景色を白に設定 |
bd=2 | bd | キャンバスの境界線の太さを2ピクセルに設定 |
relief=”sunken” | relief | 縁取りを凹んだスタイルに設定 |
cursor=”cross” | cursor | マウスカーソルを十字型に設定 |
Checkbutton(チェックボタン)
Checkbuttonは、ユーザーがON/OFFの選択を行うためのボタンです。
選択状態(チェックの有無)はvariable引数でバインドされた変数に保持されます。
複数の選択肢を同時にチェック可能で、設定やオプションの選択に便利です。
引数名 | 説明 |
---|---|
text | ラベルとして表示する文字列 |
variable | チェック状態を保持する変数(IntVar, BooleanVar, など) |
onvalue | チェック時にvariableに格納される値(デフォルトは1) |
offvalue | 非チェック時にvariableに格納される値(デフォルトは0) |
command | 状態が変更されたときに呼び出す関数 |
state | ウィジェットの状態(”normal”, “disabled”, “active”) |
bg/background | 背景色 |
fg/foreground | 文字色 |
font | フォント(例:(“Arial”, 12)) |
anchor | テキストの位置(”w”=左寄せ、”center”など) |
justify | テキストの整列方法(”left”, “center”, “right”) |
padx, pady | 内部余白(パディング) |
relief | 縁取りのスタイル(”flat”, “raised”, “sunken”など) |
indicatoron | チェックボックスを表示するか(Trueで表示、Falseでボタン風) |
selectcolor | 選択時のチェック背景色 |
disabledforeground | 無効化時の文字色 |
highlightthickness | フォーカス時の枠線の太さ |
import tkinter as tk
def check_changed():
print("チェック状態:", check_var.get())
root = tk.Tk()
root.title("Checkbutton 例")
check_var = tk.IntVar()
check = tk.Checkbutton(
root,
text="同意します", # ← text 引数:表示文字
variable=check_var, # ← variable 引数:状態保持
onvalue=1, # ← チェックON時の値
offvalue=0, # ← チェックOFF時の値
command=check_changed, # ← 状態変更時の関数
font=("Arial", 12), # ← フォント設定
selectcolor="lightgreen", # ← 選択時のチェック背景色
relief="groove" # ← 縁取りスタイル
)
check.pack(pady=20)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
text=”同意します” | text | 表示するラベル文字列 |
variable=check_var | variable | 状態を保持する変数(IntVar) |
onvalue=1 | onvalue | チェック時に格納される値 |
offvalue=0 | offvalue | 非チェック時に格納される値 |
command=check_changed | command | 状態変更時に呼び出される関数 |
font=(“Arial”, 12) | font | テキストのフォントを指定 |
selectcolor=”lightgreen” | selectcolor | チェックされたときの背景色 |
relief=”groove” | relief | ウィジェットの立体的な縁取りスタイルを指定 |
Entry(エントリー)
Entryは、1行のテキスト入力欄を生成します。
ユーザーからの文字入力を受け取り、StringVarなどの変数と連携して値を管理できます。
ログインフォームや検索バーなど、単一行の入力フィールドに適します。
引数名 | 説明 |
---|---|
textvariable | 入力値をバインドする変数(例:StringVar()) |
show | 入力内容をマスクする文字(例:’*’ でパスワード風表示) |
width | 表示幅(文字数単位) |
state | 状態(”normal”、”disabled”、”readonly”) |
bg/background | 背景色 |
fg/foreground | 文字色 |
bd/borderwidth | 枠線の太さ |
font | フォント(例:(“Arial”, 12)) |
justify | 文字の配置(”left”、”center”、”right”) |
relief | 縁取りスタイル(”flat”, “sunken”, “groove” など) |
highlightthickness | フォーカス枠の太さ |
insertbackground | カーソル色 |
insertwidth | カーソル幅 |
disabledforeground | 無効状態の文字色 |
exportselection | 選択内容のクリップボード共有の有無(True/False) |
takefocus | フォーカス移動の対象にするかどうか |
xscrollcommand | スクロールバーと連携するコマンド |
name | ウィジェット名(ID) |
import tkinter as tk
def show_entry():
print("入力内容:", entry_var.get())
root = tk.Tk()
root.title("Entry 例")
entry_var = tk.StringVar()
entry = tk.Entry(
root,
textvariable=entry_var, # ← 入力値を entry_var にバインド
width=30, # ← 表示幅:30文字分
font=("Arial", 12), # ← フォント指定
bg="white", # ← 背景色
fg="black", # ← 文字色
relief="sunken", # ← 縁取りスタイル
justify="left", # ← 左寄せで入力
show="*" # ← 入力をマスク(パスワード表示)
)
entry.pack(pady=10)
btn = tk.Button(root, text="表示", command=show_entry)
btn.pack()
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
textvariable=entry_var | textvariable | 入力内容を entry_var に連動させる |
width=30 | width | 表示フィールドの幅を30文字分に設定 |
font=(“Arial”, 12) | font | 文字のフォントをArial/12ptに設定 |
bg=”white” | bg | 背景色を白に指定 |
fg=”black” | fg | テキストの色を黒に指定 |
relief=”sunken” | relief | 立体的に凹んだ境界線で装飾 |
justify=”left” | justify | 入力文字を左寄せに設定 |
show=”*” | show | 入力文字を * でマスク(パスワード用) |
Frame(フレーム)
Frameは、複数のウィジェットをグループ化・整理するためのコンテナです。
ウィジェットをまとめてレイアウトしたり、テーマやスタイルを分けるのに便利です。
親ウィジェットとしてレイアウト制御に使われ、複雑なGUI構造の基盤になります。
引数名 | 説明 |
---|---|
bg/background | 背景色 |
bd/borderwidth | 枠線の太さ(デフォルトは0) |
relief | 枠線のスタイル(”flat”, “sunken”, “raised”, “groove”など) |
width | フレームの幅(px単位) |
height | フレームの高さ(px単位) |
highlightbackground | フォーカスしていないときの枠線色 |
highlightcolor | フォーカス時の枠線色 |
highlightthickness | フォーカス枠の太さ |
padx, pady | 内部余白(左右・上下) |
cursor | マウスオーバー時のカーソル形状(例:”cross”) |
class_ | ウィジェットクラス名(スタイリングに使われる) |
takefocus | フォーカス移動の対象にするかどうか |
name | ウィジェット名(ID) |
visual | 視覚属性(通常使用しない) |
colormap | カラーマップの識別(特殊用途) |
import tkinter as tk
root = tk.Tk()
root.title("Frame 例")
# フレーム作成
frame = tk.Frame(
root,
bg="lightgray", # ← 背景色
width=300, # ← 幅(ピクセル)
height=150, # ← 高さ(ピクセル)
relief="groove", # ← 縁取りスタイル
bd=2 # ← 枠線の太さ
)
frame.pack(padx=10, pady=10)
# フレーム内にボタンを配置
btn = tk.Button(frame, text="フレーム内のボタン")
btn.pack(pady=20)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
bg=”lightgray” | bg | フレームの背景色を指定 |
width=300 | width | フレームの横幅を300ピクセルに設定 |
height=150 | height | フレームの高さを150ピクセルに設定 |
relief=”groove” | relief | フレームの縁取りスタイルを「溝型」に指定 |
bd=2 | borderwidth | 縁取りの線の太さを2ピクセルに設定 |
pack(padx=10, pady=10) | padx, pady | 外側の余白(周囲とのスペース)を10ピクセルずつ追加 |
Label(ラベル)
Labelは、テキストや画像を表示するための基本ウィジェットです。
見出し/説明文/状態表示などユーザー入力を必要としない静的な情報表示に使われます。
文字色・背景色・フォント・画像の表示など、柔軟なカスタマイズが可能です。
引数名 | 説明 |
---|---|
text | 表示する文字列 |
textvariable | バインドする変数(例:StringVar()) |
image | 表示する画像(例:PhotoImage インスタンス) |
compound | 画像とテキストの表示位置(top, bottom, left, right, center) |
font | フォント(例:(“Arial”, 12)) |
fg/foreground | 文字色 |
bg/background | 背景色 |
bd/borderwidth | 枠線の太さ |
relief | 枠線のスタイル(flat, groove, raised, sunken など) |
anchor | テキストの配置位置(n, ne, e, se, s, sw, w, nw, center) |
justify | テキストの整列方法(left, center, right) |
padx, pady | テキストとラベル枠の間の余白 |
width, height | ラベルの幅・高さ(文字数単位、または画像用にpx単位としても扱われる) |
cursor | マウスポインタの形 |
state | 状態(通常は “normal” または “disabled”) |
wraplength | 自動折り返しする最大幅(px) |
takefocus | フォーカス移動の対象にするかどうか |
import tkinter as tk
root = tk.Tk()
root.title("Label 例")
label = tk.Label(
root,
text="ようこそ Tkinter ラベルへ!", # ← text 引数で表示内容
font=("Arial", 14), # ← フォント設定
bg="lightblue", # ← 背景色
fg="black", # ← 文字色
width=30, # ← 幅(文字単位)
height=2, # ← 高さ(文字単位)
relief="groove", # ← 枠線のスタイル
bd=2, # ← 枠線の太さ
anchor="center" # ← テキスト配置(中央寄せ)
)
label.pack(padx=10, pady=10)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
text=”ようこそ…” | text | 表示する文字列を指定 |
font=(“Arial”, 14) | font | 表示するテキストのフォントとサイズを指定 |
bg=”lightblue” | bg | 背景色を水色に設定 |
fg=”black” | fg | テキストの文字色を黒に設定 |
width=30, height=2 | width, height | ラベルのサイズ(文字数単位)を指定 |
relief=”groove” | relief | ラベルの縁取りスタイルを「溝型」に設定 |
bd=2 | borderwidth | 枠線の太さを2pxに設定 |
anchor=”center” | anchor | テキストを中央に配置 |
pack(padx=10, pady=10) | padx, pady | ラベルの周囲に外部余白を追加(10px) |
LabelFrame(ラベルフレーム)
LabelFrameは、タイトル付きの囲い枠を提供するウィジェットで複数ウィジェットのグループ化に使われます。
セクション分けや設定項目の分類表示などに使われUIを整理するのに便利です。
Frameと同様の引数に加えて、textやlabelanchorなどラベル表示に関する引数があります。
引数名 | 説明 |
---|---|
text | 枠のタイトルとして表示するテキスト |
labelanchor | タイトルの表示位置(例: “n”, “ne”, “nw”, “e” など) |
labelwidget | textの代わりに使うカスタムウィジェット |
bg/background | 背景色 |
fg/foreground | タイトル文字の色 |
font | タイトルのフォント |
bd/borderwidth | 枠線の太さ |
relief | 枠線のスタイル(flat, groove, ridge, sunken, raisedなど) |
padx, pady | 内部余白(左右・上下) |
width, height | フレームのサイズ(px単位) |
highlightthickness | フォーカス枠の太さ |
highlightbackground | フォーカス外の枠色 |
import tkinter as tk
root = tk.Tk()
root.title("LabelFrame 例")
labelframe = tk.LabelFrame(
root,
text="設定項目", # ← タイトル表示
labelanchor="n", # ← タイトルの位置(上中央)
bg="white", # ← 背景色
font=("Arial", 12, "bold"),# ← タイトルのフォント
fg="blue", # ← タイトルの文字色
bd=2, # ← 枠線の太さ
relief="groove", # ← 枠線スタイル
padx=10, pady=10 # ← 内部余白
)
labelframe.pack(padx=20, pady=20)
tk.Label(labelframe, text="名前:").grid(row=0, column=0)
tk.Entry(labelframe).grid(row=0, column=1)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
text=”設定項目” | text | ラベルフレーム上部に表示されるタイトル文字 |
labelanchor=”n” | labelanchor | タイトルの表示位置(ここでは「上中央」) |
bg=”white” | bg | フレームの背景色を白に設定 |
font=(“Arial”, 12, “bold”) | font | タイトルテキストのフォント・サイズ・太字指定 |
fg=”blue” | fg | タイトル文字の色を青に設定 |
bd=2 | borderwidth | フレーム枠線の太さを2pxに設定 |
relief=”groove” | relief | フレームの縁取りスタイルを「groove(溝型)」に設定 |
padx=10, pady=10 | padx, pady | 内部の余白(ウィジェットと枠の間)を10pxずつ設定 |
pack(padx=20, pady=20) | 外部余白(補足) | ラベルフレーム自体の周囲に余白を設定(親ウィンドウとの間隔) |
ListBox(リストボックス)
Listboxは複数の項目を一覧表示し、ユーザーが1つまたは複数選択できるウィジェットです。
フォームの選択肢やファイル一覧などに利用され、スクロールバーと組み合わせて使うことも一般的です。
選択モードや表示数/背景色など、見た目や挙動を柔軟にカスタマイズ可能です。
引数名 | 説明 |
---|---|
bg/background | 背景色 |
fg/foreground | 文字色 |
font | フォント |
height | 表示する行数 |
width | 表示する文字数(1行あたりの文字幅) |
selectmode | 選択モード(”single”, “browse”, “multiple”, “extended”) |
activestyle | アクティブ項目の見た目(”dotbox”, “none”, “underline”など) |
exportselection | 他のウィジェットと選択共有するか(通常はTrue) |
justify | テキストの配置(left, center, right) |
relief | 枠線スタイル |
bd/borderwidth | 枠線の太さ |
selectbackground | 選択時の背景色 |
selectforeground | 選択時の文字色 |
highlightthickness | フォーカス枠の太さ |
import tkinter as tk
root = tk.Tk()
root.title("Listbox 例")
listbox = tk.Listbox(
root,
height=5, # ← 表示行数
width=30, # ← 1行あたりの文字数
selectmode="multiple", # ← 複数選択可能
bg="white", # ← 背景色
fg="black", # ← 文字色
font=("Arial", 12), # ← フォント
selectbackground="lightblue",# ← 選択時の背景色
selectforeground="red", # ← 選択時の文字色
relief="groove", # ← 枠線スタイル
borderwidth=2 # ← 枠線の太さ
)
listbox.pack(padx=10, pady=10)
# サンプル項目を追加
for item in ["Python", "Java", "C++", "JavaScript", "Go"]:
listbox.insert(tk.END, item)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
height=5 | height | 表示する行数を5に設定 |
width=30 | width | 各行の表示幅を30文字に設定 |
selectmode=”multiple” | selectmode | 複数項目の選択を可能に設定 |
bg=”white” | bg | 背景色を白に設定 |
fg=”black” | fg | 文字色を黒に設定 |
font=(“Arial”, 12) | font | フォントサイズを12に設定 |
selectbackground=”lightblue” | selectbackground | 選択された項目の背景色を水色に設定 |
selectforeground=”red” | selectforeground | 選択された項目の文字色を赤に設定 |
relief=”groove” | relief | 枠線を溝状に設定 |
borderwidth=2 | bd/borderwidth | 枠線の太さを2pxに設定 |
Menu(メニュー)
Menuは、ウィンドウの上部に表示されるメニューバーやプルダウンメニューを作成するウィジェットです。
階層構造(サブメニュー)やチェック付きメニュー/ラジオメニューなど、柔軟にカスタマイズできます。
add_command()やadd_cascade()などメソッドを使って動的にメニュー項目を追加できます。
引数名 | 説明 |
---|---|
bg/background | 背景色 |
bd/borderwidth | 枠線の太さ(デフォルトは0) |
activebackground | 選択時またはカーソルが当たったときの背景色 |
activeforeground | 選択時またはカーソルが当たったときの文字色 |
tearoff | サブメニューを独立して切り離せるか(0:無効, 1:有効) |
font | フォントの指定 |
disabledforeground | 無効化された項目の文字色 |
relief | メニュー境界線のスタイル |
bd/borderwidth | メニューの枠線の太さ |
cursor | マウスオーバー時のカーソル形状(例:”cross”) |
title | ウィンドウのタイトル |
import tkinter as tk
def say_hello():
print("Hello!")
root = tk.Tk()
root.title("Menu 例")
# メニューバー作成
menubar = tk.Menu(root, bg="white", fg="black", font=("Arial", 10)) # ← 背景色・文字色・フォント
# ファイルメニュー作成
file_menu = tk.Menu(menubar, tearoff=0) # ← サブメニューの切り離しを無効化
file_menu.add_command(label="New", command=say_hello)
file_menu.add_command(label="Exit", command=root.quit)
# メニューバーにファイルメニューを追加
menubar.add_cascade(label="File", menu=file_menu)
# メニューバーをウィンドウに設定
root.config(menu=menubar)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
tk.Menu(root, bg=”white”, fg=”black”, font=…) | bg, fg, font | メニューバーの背景色、文字色、フォントを設定 |
tk.Menu(menubar, tearoff=0) | tearoff | 「ファイル」メニューを独立して切り離せないように設定 |
add_command(…) | – | メニュー項目の追加(これは引数ではなくメソッド) |
add_cascade(label=”File”, menu=file_menu) | – | サブメニューを「File」として追加(menu=で関連づけ) |
root.config(menu=menubar) | – | 作成したメニューバーをウィンドウに設定 |
MenuButton(メニューボタン)
Menubuttonは、クリックするとドロップダウンメニューを表示するボタン型ウィジェットです。
通常のボタンのように表示されますが、関連付けたMenuウィジェットを表示するトリガーになります。
フォームやツールバーにドロップダウン選択肢を組み込みたいときに使われます。
引数名 | 説明 |
---|---|
text | ボタンに表示するテキスト |
image | 表示する画像(PhotoImageオブジェクトなど) |
compound | テキストと画像の表示位置(top, bottom, left, right, center) |
menu | 関連付けるMenuウィジェット(後からconfig()で設定することが多い) |
bg/background | 背景色 |
fg/foreground | 前景色(文字色) |
activebackground | 押下時の背景色 |
activeforeground | 押下時の文字色 |
font | フォント |
relief | ボタンの立体感(flat, raised, sunken, ridge, groove) |
width/height | ボタンの幅/高さ(文字単位) |
anchor | テキストの配置(n, ne, e, se, s, sw, w, nw, center) |
direction | ドロップダウンメニューの展開方向(”above”, “below”, “left”, “right”) |
import tkinter as tk
def select_option(option):
print(f"選択された項目: {option}")
root = tk.Tk()
root.title("Menubutton 例")
# Menubutton 作成
mb = tk.Menubutton(root, text="選択してください", bg="lightblue", relief="raised", font=("Arial", 12)) # ← text, bg, relief, font を指定
mb.grid(row=0, column=0, padx=10, pady=10)
# 関連付ける Menu を作成
menu = tk.Menu(mb, tearoff=0)
menu.add_command(label="オプション 1", command=lambda: select_option("オプション 1"))
menu.add_command(label="オプション 2", command=lambda: select_option("オプション 2"))
# Menubutton に Menu を関連付け
mb["menu"] = menu # ← menu 引数に相当(configでも可)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
tk.Menubutton(…, text=”選択してください”, …) | text | ボタンに表示されるラベルテキスト |
tk.Menubutton(…, bg=”lightblue”, relief=”raised”, …) | bg, relief | 背景色、立体感の種類 |
tk.Menubutton(…, font=(“Arial”, 12)) | font | テキストのフォントスタイル |
mb[“menu”] = menu | menu | ドロップダウンとして表示されるMenuを指定 |
menu = tk.Menu(mb, tearoff=0) | tearoff(Menu側) | ドロップメニューを切り離せないように設定(Menubuttonではない) |
Message(メッセージ)
Messageは、複数行のテキストを自動折り返しで表示するラベルに似たウィジェットです。
Labelでは長いテキストが折り返されないため、可読性の高い表示を行いたい場合に便利です。
読み物形式の説明文や注意書きなどに適しています。
引数名 | 説明 |
---|---|
text | 表示するテキスト |
textvariable | 変数(StringVarなど)でテキストをバインド |
anchor | テキストの配置位置(n, ne, e, se, s, sw, w, nw, center) |
aspect | テキストの縦横比(整数) |
bg/background | 背景色 |
fg/foreground | 前景色(文字色) |
font | テキストのフォントスタイル |
justify | テキストの整列方法(left, center, right) |
padx/pady | テキストとウィジェット境界の余白 |
relief | ウィジェットの立体感(flat, raised, sunken, ridge, groove) |
width | ウィジェットの幅(ピクセル単位) |
cursor | マウスカーソルの形状 |
import tkinter as tk
root = tk.Tk()
root.title("Message ウィジェットの例")
message_text = (
"このウィジェットは、複数行のテキストを自動で折り返して表示できます。\n"
"説明文や注意書きなどに便利です。"
)
msg = tk.Message(
root,
text=message_text, # ← text 引数
width=300, # ← width:折り返しの幅
font=("Helvetica", 12), # ← font:フォント
bg="lightyellow", # ← bg:背景色
fg="black", # ← fg:文字色
justify="left", # ← justify:左揃え
relief="groove", # ← relief:枠線
padx=10, pady=10 # ← padx, pady:余白
)
msg.pack(padx=20, pady=20)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
text=message_text | text | 表示する長文テキスト |
width=300 | width | 自動折り返しする最大幅(ピクセル単位) |
font=(“Helvetica”, 12) | font | 表示フォント |
bg=”lightyellow” | bg | 背景色 |
fg=”black” | fg | テキストの色 |
justify=”left” | justify | テキストの整列(左揃え) |
relief=”groove” | relief | メッセージ枠のデザイン |
padx=10, pady=10 | padx/pady | ウィジェット内側の余白 |
pack(padx=20, pady=20) | padx/pady | ウィジェット外側の余白(レイアウト時の引数) |
OptionMenu(オプションメニュー)
OptionMenuは、ユーザーが定義した選択肢の中から1つを選ぶドロップダウンメニューです。
選択された値はStringVarなどの変数に自動的に格納され、他のウィジェットと連携できます。
フォームや設定画面などで限定的な選択肢を提供したい場合に便利です。
OptionMenuは他のウィジェットと異なり、通常のキーワード引数ではなくコンストラクタで引数を渡す形式です。
引数名 | 説明 |
---|---|
master | 親ウィジェット |
variable | StringVarオブジェクト/選択された値が格納される |
value1〜valueN | 選択肢として表示する文字列リスト |
bg | 背景色 |
fg | 文字色 |
font | フォントスタイル |
width | ボタンの幅(文字数単位) |
highlightthickness | フォーカス枠の太さ |
anchor | テキストの位置(w, center など) |
direction | メニューの表示方向(tk.RIGHT, tk.LEFTなど) |
import tkinter as tk
root = tk.Tk()
root.title("OptionMenu の例")
# 変数の定義
selected_color = tk.StringVar(value="赤") # ← variable
# OptionMenu ウィジェットの生成
color_menu = tk.OptionMenu(
root,
selected_color, # ← variable
"赤", "青", "緑", "黄", "黒" # ← 選択肢 value1〜valueN
)
# 外観の調整
color_menu.config(
width=10, # ← width
font=("Arial", 12), # ← font
bg="white" # ← bg
)
color_menu.pack(pady=20)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
selected_color = tk.StringVar(…) | variable | 選択された値を保持する変数 |
“赤”, “青”, … | value1〜N | ドロップダウンで選べる各選択肢 |
width=10 | width | メニューの横幅(10文字分) |
font=(“Arial”, 12) | font | 表示フォント |
bg=”white” | bg | 背景色(白) |
pack(pady=20) | – | ウィジェットの外側余白(レイアウト) |
PanedWindow(パネルウィンドウ)
PanedWindowは、複数ウィジェットを水平または垂直に並べて可動式区切りバーで分割できるコンテナウィジェットです。
区切りバー(スプリッター)をドラッグすることで、ユーザーが表示領域を調整できます。
ファイルマネージャーや設定画面などで、柔軟なレイアウト構成を実現できます。
引数名 | 説明 |
---|---|
master | 親ウィジェット |
orient | パネルの配置方向 |
bg | 背景色 |
bd | 枠線の太さ(border width) |
width | ウィジェットの幅 |
height | ウィジェットの高さ |
sashpad | パネル間のスペース(パディング) |
sashrelief | 境界バーのreliefスタイル |
sashwidth | 区切りバー(sash)の幅 |
handlepad | ドラッグ用ハンドルのパディング |
handlesize | ドラッグ用ハンドルのサイズ |
showhandle | ハンドルを表示するか(True/False) |
import tkinter as tk
root = tk.Tk()
root.title("PanedWindow の例")
# PanedWindow の作成
pw = tk.PanedWindow(
root,
orient=tk.HORIZONTAL, # ← orient
bg="lightgray", # ← bg
sashrelief=tk.RAISED, # ← sashrelief
sashwidth=10, # ← sashwidth
showhandle=True # ← showhandle
)
pw.pack(fill=tk.BOTH, expand=True)
# 左側パネル
left = tk.Label(pw, text="左パネル", bg="lightblue", width=20, height=10)
pw.add(left) # ← add() でウィジェットを追加
# 右側パネル
right = tk.Label(pw, text="右パネル", bg="lightgreen", width=20, height=10)
pw.add(right)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
orient=tk.HORIZONTAL | orient | パネルを横方向に配置 |
bg=”lightgray” | bg | 背景色 |
sashrelief=tk.RAISED | sashrelief | スプリッターの見た目 |
sashwidth=10 | sashwidth | 区切りバーの幅 |
showhandle=True | showhandle | ドラッグ用ハンドルを表示 |
pw.add(left)/pw.add(right) | add() | 各パネルにウィジェットを追加 |
left = tk.Label(…), right = tk.Label(…) | – | パネルとして使用されるラベル |
pack(fill=tk.BOTH, expand=True) | – | ウィンドウ全体に表示 |
RadioButton(ラジオボタン)
Radiobuttonは、複数選択肢の中から1つを選ぶウィジェットです。
複数のRadiobuttonが同じvariableを共有することで、相互に排他的な選択が可能です。
フォームや設定画面での選択肢に便利なウィジェットです。
引数名 | 説明 |
---|---|
master | 親ウィジェット |
text | ボタンに表示する文字列 |
variable | 選択状態を保持する変数(tk.StringVarなど) |
value | 選択時にvariableにセットされる値 |
command | ボタンが選択されたときに呼ばれる関数 |
state | 状態(NORMAL, DISABLEDなど) |
bg | 背景色 |
fg | 文字色 |
font | フォント |
anchor | テキストの位置(w, e, center など) |
justify | テキストの整列(LEFT, CENTER, RIGHT) |
width | 幅 |
height | 高さ |
padx/pady | パディング(内側余白) |
indicatoron | インジケーターを表示するか |
selectcolor | 選択時の背景色 |
relief | 枠線のスタイル |
image | 画像を表示 |
compound | テキストと画像の表示位置の関係(left, right, top, bottom) |
import tkinter as tk
def show_choice():
print("選択された値:", selected.get())
root = tk.Tk()
root.title("Radiobutton の例")
selected = tk.StringVar()
selected.set("B")
rb1 = tk.Radiobutton(
root,
text="選択肢 A", # ← text
variable=selected, # ← variable
value="A", # ← value
command=show_choice, # ← command
bg="lightyellow", # ← bg
selectcolor="orange" # ← selectcolor
)
rb1.pack(anchor="w")
rb2 = tk.Radiobutton(
root,
text="選択肢 B",
variable=selected,
value="B",
command=show_choice,
bg="lightyellow",
selectcolor="orange"
)
rb2.pack(anchor="w")
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
text=”選択肢 A” | text | ボタンに表示される文字列 |
variable=selected | variable | ラジオボタン群で共有する変数 |
value=”A”/value=”B” | value | 選択時にvariableに入る値 |
command=show_choice | command | 選択時に呼び出される関数 |
bg=”lightyellow” | bg | 背景色 |
selectcolor=”orange” | selectcolor | 選択時の○部分の色 |
pack(anchor=”w”) | – | 左寄せで表示 |
Scale(スケール)
Scaleは、ユーザーが数値をスライダーで調整できるGUI要素です。
水平方向や垂直方向にスライドさせて範囲内の値を選択できます。
from_~toで範囲を指定し、commandで値変更時の処理も設定可能です。
引数名 | 説明 |
---|---|
master | 親ウィジェット |
from_ | スケールの最小値(fromはキーワードとして予約されているためfrom_) |
to | スケールの最大値 |
orient | 向き(tk.HORIZONTAL または tk.VERTICAL) |
length | スケール全体の長さ(ピクセル) |
resolution | 変化する刻み値(小数にも対応) |
tickinterval | メモリ間隔(数値ラベルの間隔) |
command | 値が変更されたときに呼ばれる関数 |
variable | スケールの値を保持する |
label | スケールの上部または横に表示されるラベル |
sliderlength | スライダー(摘み)の長さ |
sliderrelief | スライダーの枠スタイル |
showvalue | 現在値を表示するか(True/False) |
bg/fg | 背景色/文字色 |
font | ラベルや値のフォント |
state | 状態(NORMAL, DISABLEDなど) |
import tkinter as tk
def on_scale(val):
print("選択された値:", val)
root = tk.Tk()
root.title("Scale の例")
scale = tk.Scale(
root,
from_=0, # ← from_
to=100, # ← to
orient=tk.HORIZONTAL,# ← orient
length=300, # ← length
tickinterval=20, # ← tickinterval
resolution=5, # ← resolution
label="ボリューム", # ← label
command=on_scale # ← command
)
scale.pack(pady=10)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
from_=0 | from_ | スケールの最小値 |
to=100 | to | スケールの最大値 |
orient=tk.HORIZONTAL | orient | スライダーの方向(水平方向) |
length=300 | length | スケールの全長 |
tickinterval=20 | tickinterval | 20ごとに目盛りラベルを表示 |
resolution=5 | resolution | 5刻みでスライドできるように設定 |
label=”ボリューム” | label | スケールに表示されるタイトルラベル |
command=on_scale | command | 値変更時に呼ばれる関数 |
pack(pady=10) | – | 上下の余白を設定 |
Scrollbar(スクロールバー)
Scrollbarは、他ウィジェットの表示領域を超えた部分をスクロール可能にするウィジェットです。
縦方向または横方向に配置し、連動するウィジェットのスクロール操作をサポートします。
command引数でスクロール対象のウィジェット操作関数を指定し、setメソッドで位置調整します。
引数名 | 説明 |
---|---|
master | 親ウィジェット |
orient | スクロールバーの方向(tk.VERTICALまたはtk.HORIZONTAL) |
command | スクロール対象のウィジェットに連動するスクロール操作関数 |
activebackground | マウスが乗ったときの背景色 |
bg/background | 背景色 |
troughcolor | スクロールバーの溝の色 |
width | スクロールバーの幅(ピクセル) |
elementborderwidth | スクロールバーの境界幅 |
relief | 枠のスタイル(FLAT, RAISED, SUNKENなど) |
takefocus | フォーカスの受け取り(0か1) |
jump | スクロールの動作をページ単位にするかどうか(True/False) |
import tkinter as tk
root = tk.Tk()
root.title("Scrollbar の例")
# テキストウィジェット(スクロール対象)
text = tk.Text(root, width=40, height=10)
text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
# スクロールバーの作成
scrollbar = tk.Scrollbar(
root,
orient=tk.VERTICAL, # ← orient
command=text.yview # ← command
)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
# スクロールバーとテキストウィジェットを連動させる
text.config(yscrollcommand=scrollbar.set)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
orient=tk.VERTICAL | orient | 縦方向のスクロールバーとして配置 |
command=text.yview | command | スクロール操作時にテキストウィジェットの表示を更新 |
text.config(yscrollcommand=scrollbar.set) | – | テキストウィジェットのスクロール時にスクロールバーを動かす |
Spinbox(スピンボックス)
Spinboxは、ユーザーが上下の矢印ボタンで値を増減できる入力欄です。
数値や文字列の範囲を指定し、簡単に選択・入力が可能です。
from_とtoで範囲設定、commandで値変更時の処理を指定できます。
引数名 | 説明 |
---|---|
master | 親ウィジェット |
from_ | 開始値(数値範囲の最小値) |
to | 終了値(数値範囲の最大値) |
increment | 値の増減幅(デフォルトは1) |
values | 指定値のリストやタプル(これを指定するとfrom_/toは無効) |
textvariable | 値を保持する変数 |
command | 値が変更されたときに呼ばれる関数 |
state | 状態(NORMAL/DISABLEDなど) |
wrap | 範囲の端から端への循環(True/False) |
width | 幅 |
justify | 文字の配置(LEFT, CENTER, RIGHT) |
font | フォント |
bg/fg | 背景色/文字色 |
import tkinter as tk
def on_spinbox_change():
print("現在の値:", spinbox.get())
root = tk.Tk()
root.title("Spinbox の例")
spinbox = tk.Spinbox(
root,
from_=0, # ← from_
to=10, # ← to
increment=2, # ← increment
width=5, # ← width
command=on_spinbox_change, # ← command
justify='center' # ← justify
)
spinbox.pack(pady=10)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
from_=0 | from_ | スピンボックスの最小値 |
to=10 | to | スピンボックスの最大値 |
increment=2 | increment | 値の増減幅(2ずつ変わる) |
width=5 | width | 幅を5文字分に設定 |
command=on_spinbox_change | command | 値変更時に関数を呼び出す |
justify=’center’ | justify | 入力テキストを中央寄せ |
Text(テキスト)
Textは、複数行のテキスト入力や表示を行うウィジェットです。
改行や装飾(タグ)も可能で、ログ表示やメモ帳のようなアプリに適しています。
スクロールバーと組み合わせて使うことが多く、テキスト操作メソッドも豊富です。
引数名 | 説明 |
---|---|
master | 親ウィジェット |
width | 幅 |
height | 高さ |
bg/background | 背景色 |
fg/foreground | 文字色 |
padx/pady | 内側の余白(ピクセル単位) |
bd/borderwidth | 枠線の幅 |
relief | 枠のスタイル(FLAT, RAISED, SUNKENなど) |
wrap | 折り返し方法(NONE, CHAR, WORD) |
state | 状態(NORMAL/DISABLEDなど) |
exportselection | クリップボードとの選択連動(True/False) |
undo | Undo機能を有効にする(True/False) |
autoseparators | Undo時のセパレーターを自動挿入(True/False) |
maxundo | Undo履歴の最大数 |
xscrollcommand | 水平スクロール時のコールバック関数 |
yscrollcommand | 垂直スクロール時のコールバック関数 |
import tkinter as tk
root = tk.Tk()
root.title("Text ウィジェットの例")
text = tk.Text(
root,
width=40, # ← width
height=10, # ← height
bg="lightyellow", # ← bg
fg="blue", # ← fg
font=("Arial", 12), # ← font
wrap="word", # ← wrap
undo=True # ← undo
)
text.pack(padx=10, pady=10)
text.insert(tk.END, "ここに複数行のテキストを入力・表示できます。\n改行も可能です。")
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
width=40 | width | 横幅を40文字分に設定 |
height=10 | height | 縦方向の行数を10行に設定 |
bg=”lightyellow” | bg | 背景色を薄い黄色に設定 |
fg=”blue” | fg | 文字色を青に設定 |
font=(“Arial”, 12) | font | フォントをArial/サイズ12に設定 |
wrap=”word” | wrap | 単語単位で折り返す設定 |
undo=True | undo | Undo機能を有効化 |
Toplevel(トップレベル)
Toplevelは、新しい独立したウィンドウを生成するウィジェットです。
メインウィンドウ(Tk)とは別にサブウィンドウを作成し、ダイアログや設定画面などに使います。
親ウィンドウの管理下で独自のタイトルバーやサイズ変更が可能です。
引数名 | 説明 |
---|---|
master | 親ウィジェット(通常はメインウィンドウ) |
class_ | ウィンドウのクラス名 |
use | X11用のXリソースデータベースの識別子 |
screen | 表示するスクリーン番号(マルチディスプレイ環境で使用) |
baseName | X11用のベース名(デフォルトはclass_と同じ) |
import tkinter as tk
root = tk.Tk()
root.title("メインウィンドウ")
def open_subwindow():
sub = tk.Toplevel(master=root) # ← master引数(親ウィンドウ指定)
sub.title("サブウィンドウ")
sub.geometry("300x200") # ウィンドウサイズ指定
label = tk.Label(sub, text="これはサブウィンドウです")
label.pack(padx=20, pady=20)
button = tk.Button(root, text="サブウィンドウを開く", command=open_subwindow)
button.pack(padx=50, pady=50)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
tk.Toplevel(master=root) | master | 親ウィンドウ(root)を指定し、サブウィンドウを作成 |
PhotoImage(フォトイメージ)
PhotoImageは画像ファイルを読み込んで表示するウィジェットです。
対応形式は主にGIFやPNGでラベルやボタンの画像表示に使われます。
画像はメモリ上に保持されウィジェットにセットして表示します。
引数名 | 説明 |
---|---|
file | 読み込む画像ファイルのパス(GIF、PNGなど) |
data | 画像データを直接base64エンコード文字列で指定する場合に使用 |
format | 画像フォーマット指定(通常は省略、gifや’pngなどを明示的に指定可能) |
width | 画像の幅(ピクセル単位、ファイル未指定時に有効) |
height | 画像の高さ(ピクセル単位、ファイル未指定時に有効) |
palette | カラー画像のパレット指定(通常は使われません) |
import tkinter as tk
root = tk.Tk()
root.title("PhotoImageの例")
# 画像ファイルを読み込み(file引数)
img = tk.PhotoImage(file="example.png")
label = tk.Label(root, image=img) # image引数にPhotoImageオブジェクトをセット
label.pack(padx=20, pady=20)
root.mainloop()
使用箇所 | 引数名 | 説明 |
---|---|---|
tk.PhotoImage(file=”example.png”) | file | 画像ファイルパスを指定し画像を読み込む |
tk.Label(root, image=img) | image | ラベルに画像としてPhotoImageオブジェクトをセット |
PhotoImageは画像ファイルの読み込みにfileを使い、imageオプションに渡して表示します。
data引数でbase64文字列を直接指定する使い方もありますが、基本はファイル指定が一般的です。
コメント