【Python】ttk:Label(ラベル)の使い方(フォント・サイズ・色のオプション設定)
2021.01.09 /
本記事ではttkモジュールでのLabel(ラベル)ウィジェットの詳しい使い方について解説していきます。
ラベルウィジェットの作成方法からオプションによるラベルのフォント・サイズ・色・配置などの設定方法についても詳しく解説していきます。
PythonでGUIアプリケーションを作成するためにtkinter.ttkモジュールを使用します。
ttkモジュールは通常のtkinterと比べてモダンなGUIアプリを作成できます。
tkinterとttkでは各ウィジェットの外観や機能が異なります。
詳しい違いについては以下記事をご参照ください。
【Python】ttk:tkinterと比べた各ウィジェットの外観と機能面の違い
tkinterでのラベルウィジェットの使い方は以下記事をご参照ください。
【Python】ttk:tkinterと比べた各ウィジェットの外観と機能面の違い
本記事を通して以下の知識を学ぶことができます。
- ttkにおけるLabel(ラベル)ウィジェットの使用方法
- ラベルウィジェットの各種オプションについて
- オプションを用いたラベルの外観変更
ttkによるLabel(ラベル)ウィジェットの作成
ttkのインポート
tkinterは標準ライブラリのため、Pythonが使える環境であればpipでインストールなど必要なく、始めからインストールされています。
ttkモジュールはTk 8.5から使えます。最新のPythonであればttkは問題なく使えます。
ttkを使用するために、プログラムの先頭でttkをインポートします。
from tkinter import ttk
上記でttkをインポートし、ラベルウィジェットだけでなく他のウィジェット(ボタン、エントリーなど)も使用できます。
ラベルウィジェットとは
ラベルウィジェットは文字を表示するためのウィジェットです。
文字だけでなく画像も表示できます。
文字はオプションを使うことで、装飾することができ、配置なども変更できます。
ラベルウィジェットに表示するテキストはプログラムから動的に変更できます。
後述しますが、textvariableオプションにテキスト用のウィジェット変数を指定することで動的にテキストを変更できます。
ラベルウィジェットの作成
ラベルウィジェットの作成は以下のように記述します。
label = ttk.Label(frame, text="ttk.Label")
第一引数には親ウィジェットを指定します。
第二引数以降はオプションを指定します。上記ではtextオプションを使用しています。
ラベルウィジェットのオブジェクトを作成したら、pack()やgrid()を使用してラベルウィジェットを配置しましょう。
サンプルプログラム
実際にラベルオブジェクトを使用して、GUIアプリにテキストを表示してみます。
import tkinter as tk
from tkinter import ttk
# rootメインウィンドウの設定
root = tk.Tk()
root.title("ttk app")
root.geometry("100x50")
# メインフレームの作成と設置
frame = ttk.Frame(root)
frame.pack(padx=20,pady=10)
# 各種ウィジェットの作成
label = ttk.Label(frame, text="ttk.Label")
# 各種ウィジェットの設置
label.grid(row=0, column=0)
root.mainloop()
以下ではこのサンプルを元にラベルのオプションについて解説していきます。
Label(ラベル)オプション一覧
以下にttkにおけるラベルウィジェットのオプション一覧を記します。
オプション | 説明 |
---|---|
state | テキストの状態 |
font | テキストのフォント指定 |
text | 表示するテキスト |
underline | 下線の位置 |
textvariable | 動的に文字を変化させる場合に使用 |
compound | 表示する画像の位置を指定 |
image | 表示する画像を指定 |
relief | 外観(ボタンのボーダースタイル) |
width | 横幅 |
takefocus | Tabキーでのフォーカス有無 |
anchor | テキストの配置位置 |
justify | 複数行にわたった場合の文字揃え |
padding | 内部の間隔(縦幅の設定にも使用) |
background | 背景色 |
foreground | 前景色(文字色) |
cursor | カーソルの指定 |
Label(ラベル)オプションの使い方
背景色:background
- label = ttk.Label(frame, text="green", background="green")
- label2 = ttk.Label(frame, text="blue", background="blue")
- label3 = ttk.Label(frame, text="#ff0000", background="#ff0000")
backgroundオプションはラベルウィジェットの背景色を変更できます。
オプション値には色名またはRGBを指定します。
前景色:foreground
- label = ttk.Label(frame, text="green", foreground="green")
- label2 = ttk.Label(frame, text="blue", foreground="blue")
- label3 = ttk.Label(frame, text="#ff0000", foreground="#ff0000")
foregroundオプションは前景色(テキスト文字色)を変更できます。
オプション値には色名またはRGBを指定します。
テキストの変更:textvariable
textvariableオプションはテキストを動的に変更させたい場合に使用します。
事前にテキスト用のウィジェット変数を作成し、textvariableオプションにその変数を指定します。
テキストを変更する際は、ウィジェット変数の中身を変更することで表示するテキストも変更される仕組みです。
import tkinter as tk
from tkinter import ttk
def change():
text.set("変更しました")
# rootメインウィンドウの設定
root = tk.Tk()
root.title("ttk app")
root.geometry("200x100")
# メインフレームの作成と設置
frame = ttk.Frame(root)
frame.pack(padx=20,pady=10)
# StringVarのインスタンスを格納するウィジェット変数text
text = tk.StringVar(frame)
text.set("ボタンを押すと変更します")
# 各種ウィジェットの作成
label = ttk.Label(frame, textvariable=text)
button = ttk.Button(frame, text="change", command=change)
# 各種ウィジェットの設置
label.grid(row=0, column=0)
button.grid(row=1, column=0)
root.mainloop()
画像の配置位置:compound
# 画像ファイルをインスタンス変数に代入
img = tk.PhotoImage(file="folder.png")
# 各種ウィジェットの作成
label = ttk.Label(frame, text="top", image=img, compound="top")
label2 = ttk.Label(frame, text="bottom", image=img, compound="bottom")
label3 = ttk.Label(frame, text="left", image=img, compound="left")
label4 = ttk.Label(frame, text="right", image=img, compound="right")
label5 = ttk.Label(frame, text="center", image=img, compound="center")
compoundオプションでは、画像をテキストに対してどこに配置するかを指定できます。
ラベルウィジェットに画像を表示するには以下の流れでプログラムを組む必要があります。
- 画像の読み込み
- 画像のリサイズ(必要であれば)
- 画像をラベルウィジェットのimageオプションに指定
画像の読み込みではtk.PhotoImage関数を使用し、画像のパスを与えます。
以下記事にも詳しい説明がありますので併せてご確認ください。
【Python tkinter】ボタンウィジェットに画像を表示させる(PhotoImage)
値 | 説明 |
---|---|
text | テキストのみ表示 |
image | 画像のみ表示 |
none | 画像のみを表示(デフォルト) |
top | 画像をテキストの上に表示 |
bottom | 画像をテキストの下に表示 |
right | 画像をテキストの右に表示 |
left | 画像をテキストの左に表示 |
center | 画像の中心にテキストを表示 |
外観:relief
- label = ttk.Label(frame, text="flat", relief="flat")
- label2 = ttk.Label(frame, text="groove", relief="groove")
- label3 = ttk.Label(frame, text="raised", relief="raised")
- label4 = ttk.Label(frame, text="ridge", relief="ridge")
- label5 = ttk.Label(frame, text="solid", relief="solid")
- label6 = ttk.Label(frame, text="sunken", relief="sunken")
ボーダースタイル | 説明 |
---|---|
FLAT | 平面 |
RAISED | ボタンが隆起 |
SUNKEN | ボタンが凹む |
GROOVE | 枠が凹む |
RIDGE | 枠が隆起 |
SOLID | 枠が実線 |
テキストの配置位置:anchor
label = ttk.Label(frame, text="anchor n", anchor="n", width=20, relief="solid")
label2 = ttk.Label(frame, text="anchor w", anchor="w", width=20, relief="solid")
label3 = ttk.Label(frame, text="anchor s", anchor="s", width=20, relief="solid")
label4 = ttk.Label(frame, text="anchor e", anchor="e", width=20, relief="solid")
# 各種ウィジェットの設置
label.grid(row=0, column=0, pady=10, ipady=10)
label2.grid(row=1, column=0, pady=10, ipady=10)
label3.grid(row=2, column=0, pady=10, ipady=10)
label4.grid(row=3, column=0, pady=10, ipady=10)
anchorオプションはテキストの配置位置を指定できます。
オプション値は東西南北(news)の組み合わせ8方向(nw, n, ne, w, e, sw, s, se)と中央(center)で配置位置を指定します。
内部間隔:padding
- label = ttk.Label(frame, text="padding", padding=[10,20,10,20], relief="solid")
- label2 = ttk.Label(frame, text="padding", padding=[5,10,5], relief="solid")
- label3 = ttk.Label(frame, text="padding", padding=[5,10], relief="solid")
- label4 = ttk.Label(frame, text="padding", padding=[10], relief="solid")
paddingオプションは内部間隔を指定できます。
tkinterのラベルウィジェットではheightオプションで縦幅を指定できましたが、ttkではheightオプションはなくなりました。
そのためpaddingでラベルの縦幅を調整する必要があります。
もしくはウィジェット配置時(grid()など)にipadyなどで内部間隔を付けて縦幅を調整してもいいです。
枠線の幅:borderwidth
- label = ttk.Label(frame, text="width 1", borderwidth=1, padding=[10], relief="solid")
- label2 = ttk.Label(frame, text="width 5", borderwidth=5, padding=[10], relief="solid")
- label3 = ttk.Label(frame, text="width 10", borderwidth=10, padding=[10], relief="solid")
borderwidthオプションではラベルウィジェットの枠線の幅を変更できます。
注意点としてはウィジェットのテーマが「classic、alt、default」のどれかである、reliefがflat以外で指定している必要があります。
上記画像ではテーマをclassicにしています。
- style=ttk.Style()
- style.theme_use("classic")
カーソル指定:cursor
cursorオプションではラベルウィジェット上に乗ったカーソルの形を指定できます。
カーソルの一覧は以下サイトをご参照ください。
テキストフォント指定:font
- label = ttk.Label(frame, text="Arial 20", font=("Arial", 20), padding=[10], relief="solid")
- label2 = ttk.Label(frame, text="HG行書体 10", font=("HG行書体", 10), padding=[10], relief="solid")
- label3 = ttk.Label(frame, text="MS ゴシック 15", font=("MS ゴシック", 15), padding=[10], relief="solid")
fontオプションではテキストフォントを指定できます。
指定できるのは、フォント形式・サイズ・太さ・傾き・下線などです。