【Python】ttk:Label(ラベル)の使い方(フォント・サイズ・色のオプション設定)

時計 2021.01.09 / 時計

【Python】ttk:Label(ラベル)の使い方(フォント・サイズ・色のオプション設定)

本記事ではttkモジュールでのLabel(ラベル)ウィジェットの詳しい使い方について解説していきます。

ラベルウィジェットの作成方法からオプションによるラベルのフォント・サイズ・色・配置などの設定方法についても詳しく解説していきます。

PythonでGUIアプリケーションを作成するためにtkinter.ttkモジュールを使用します。
ttkモジュールは通常のtkinterと比べてモダンなGUIアプリを作成できます。

tkinterと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アプリにテキストを表示してみます。

ttk:labelの使い方サンプルプログラム
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

ttk 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

ttk labelの使い方: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オプションにその変数を指定します。
テキストを変更する際は、ウィジェット変数の中身を変更することで表示するテキストも変更される仕組みです。

ttk labelの使い方:textvariableオプション(変化前)
ttk labelの使い方: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

ttk labelの使い方: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オプションでは、画像をテキストに対してどこに配置するかを指定できます。

ラベルウィジェットに画像を表示するには以下の流れでプログラムを組む必要があります。

  1. 画像の読み込み
  2. 画像のリサイズ(必要であれば)
  3. 画像をラベルウィジェットのimageオプションに指定

画像の読み込みではtk.PhotoImage関数を使用し、画像のパスを与えます。

以下記事にも詳しい説明がありますので併せてご確認ください。

【Python tkinter】ボタンウィジェットに画像を表示させる(PhotoImage)

説明
text テキストのみ表示
image 画像のみ表示
none 画像のみを表示(デフォルト)
top 画像をテキストの上に表示
bottom 画像をテキストの下に表示
right 画像をテキストの右に表示
left 画像をテキストの左に表示
center 画像の中心にテキストを表示

外観:relief

ttk labelの使い方: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

ttk labelの使い方: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

ttk labelの使い方: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

ttk labelの使い方: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オプションではラベルウィジェット上に乗ったカーソルの形を指定できます。

カーソルの一覧は以下サイトをご参照ください。

Tkinter cursors

テキストフォント指定:font

ttk labelの使い方: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オプションではテキストフォントを指定できます。
指定できるのは、フォント形式・サイズ・太さ・傾き・下線などです。