【Python】TkinterのLabel(ラベル)使い方

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

Tkinterラベルの配置やイベント追加

Tkinterのラベル(Label)ウィジェットは、テキストや画像を表示するための基本的なウィジェットで、様々なカスタマイズや機能を提供しています。

ラベルは、短いテキストを表示することを目的とし、その使い道は多岐に渡っています。

例えば、Pythonは配布できますが、著作権表示(coperight)の記載が必須としているので、ソフト内に表示する場合はラベルの使用が有効です。

配布でexe化すれば、Python環境不要です。
ラベルの使用用途
  • フォームや入力画面の名前や説明の表示
  • アプリケーション内のテキストの表示
  • エラーメッセージや警告の表示
  • ボタンやアイコンの説明の表示
  • 画像の説明の表示

本記事では、Tkinterのラベル作成・基本的な機能、カスタマイズ紹介します。
ラベルは、GUI(Graphical User Interface)アプリケーションで使用されるUI要素で、ユーザーに情報を提供するために使用されます。

本記事は次の人におすすめ
  • Tkinterのラベルの使い方を知りたい。
  • ラベルの配置や色、フォント等の装飾について知りたい。
  • 基本的な機能の他にカスタマイズ・スタイル、イベント・インタラクションを知りたい。
Udemyで学習する
スポンサーリンク

画面(ウィンドウ)作成

初めに画面を作成します。
メインウィンドウを作成するには、ソースコードに記述した内容は必須です。

import tkinter

# ウィンドウを作成
root = tkinter.Tk()

#ウィンドウのサイズ
root.geometry("300x150")

#ウィンドウのタイトル
root.title("ラベル作成")

####################################
     ###処理コード###
####################################

# ウィンドウ表示
root.mainloop()

特に、最後の「root.mainloop()」を記述しないとGUI画面は何も表示されません。

mainloop()とは

mainloop()は、イベントループを開始するために呼び出すTkinterで使用するメソッドです。

ウィンドウが閉じられるまでプログラムを実行し続けて、
ボタンのクリック、キーの押下、マウスの動きなどのユーザー入力を待ち受けて処理します。

GUIアプリケーションは、ユーザーの入力をリアルタイムで処理する必要があります。
mainloop()を呼び出さなければ、プログラムは終了してしまい、
ユーザーがウィンドウとインタラクションできる時間がなくなります。

mainloop()を呼び出すことで、プログラムは更新を続けて
ユーザーの操作を待ち受ける状態を保つことができます。

ラベル作成

ラベルの作成にはtkinterのモジュール下で定義します。
ただし、メインウィンドウを作成するtkinter.Tk()とmainloop()の間に記述して下さい。

「tk.label()」の1行でラベルは作成可能です。
配置場所は、pack()grid()place()と3つのメソッドがあります。

import tkinter

# メインウィンドウを作成
root = tkinter.Tk()

#画面サイズ
root.geometry("200x150")

# ラベルを作成
label = tkinter.Label()

# 配置方法を選択する(いずれかのコメントを外す)
label.pack()
#label.grid(row=0, column=0)
#label.place(x=50, y=50)

# メインループを開始
root.mainloop()

ラベルの更新

ラベルの内容を更新するには、Labelウィジェットのconfig(またはconfigure)メソッドを使用します。これにより既存のラベルのテキストなどの属性を変更できます。

以下のコードはボタンを押すと、初期のテキストから更新テキストに変更します。

import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text="初期テキスト")
label.pack()

# ボタンを押すとテキストを更新
button = tk.Button(root, text="更新", command=lambda: label.config(text="更新テキスト"))
button.pack()

root.mainloop()
Tkinterのボタンの使い方をまとめています。

更新機能はユーザーの入力に応じて情報を表示する時や時刻やカウントダウンなど、リアルタイムで変化する情報を表示する時に役立ちます。

ラベルプロパティ一覧

ラベルのプロパティはLabel()メソッドのカッコ内に記入します。

text ラベルに表示するテキスト
image ラベルに表示する画像
font テキストのフォント設定
fg テキストの色(フォアグラウンドカラー)
bg 背景色
wiidth ラベル幅
height ラベル高さ
padx 横方向パディング
pady 縦方向パディング
borderwidth 枠線の幅
relief 枠線のスタイル(平面、浮き彫り、沈み込みなど)
anchor テキストや画像の配置(中央、左、右など)
justify 複数行テキストの行揃え

pack()

packメソッドは、ウィンドウ内でウィジェットの位置を簡単で自動的に決定するので、
ウィジェットを上下または左右に順番に並べるのに適しています。

import tkinter

# メインウィンドウを作成
root = tkinter.Tk()

#画面サイズ
root.geometry("200x150")

#ラベルを作成
label1 = tkinter.Label(root, text="Label 1")
label2 = tkinter.Label(root, text="Label 2")
label3 = tkinter.Label(root, text="Label 3")

# packによる配置
label1.pack()
label2.pack(side =tkinter.BOTTOM)
label3.pack()

# メインループを開始
root.mainloop()

sideオプションを使用することで、TOP(上)、BOTTOM(下)、LEFT(左)、RIGHT(右)のいずれかの方向にウィジェットを配置することもできます。

sideの他にもanchorオプションでもウィジェットを配置することができます。
上のNはNorth”北”、下のSはSouth”南”と方角の頭文字で表現します。
ただし、左上に配置したいときはNWになり、逆にしないことに注意してください。

anchorを使うことでTkinterのラベルを左寄せにすることができます。

anchor
  • tkinter.CENTER:中央
  • tkinter.N:上
  • tkinter.S:下
  • tkinter.W:左
  • tkinter.E:右
  • tkinter.NW:左上
  • tkinter.NE:右上
  • tkinter.SW:左下
  • tkinter.SE:右下

sideやanchorの他にもパラメータを指定することができます。

pack()のパラメータ
  • side: ウィジェットを配置する方角(tk.TOP、tk.BOTTOM、tk.LEFT、tk.RIGHT)。
  • fill: ウィジェットがどの方向に伸縮するか(tk.NONE、tk.X、tk.Y、tk.BOTH)。
  • expand: ウィジェットが利用可能な空間をどの程度使うか(TrueまたはFalse)。
  • padx: 横方向のパディング。
  • pady: 縦方向のパディング。

grid()

grid()は、グリッド(格子)状に配置するメソッドです。
このメソッドを使用することで、ウィジェットをより詳細に制御することができます。

import tkinter

# メインウィンドウを作成
root = tkinter.Tk()

#画面サイズ
root.geometry("200x150")

# ラベルを作成
label1 = tkinter.Label(root, text="Label 1")
label2 = tkinter.Label(root, text="Label 2")
label3 = tkinter.Label(root, text="Label 3")

# gridによる配置
label1.grid(row=0, column=0)
label2.grid(row=0, column=1)
label3.grid(row=1, column=0, columnspan=2)

# メインループを開始
root.mainloop()

rowcolumnオプションを使用することで、ラベルを配置する行と列を指定することができます。また、columnspanオプションを使用することで、列にまたがるようにしています。

自動的に配置するpack()よりも複雑にはなりますが、細かく配置したいときにおすすめです。

grid()のパラメータ
  • row: 行番号(0から始まる)。
  • column: 列番号(0から始まる)。
  • sticky: ウィジェットをどの方向に引き伸ばすか(”n”, “e”, “s”, “w” の組み合わせ)。
  • padx: 横方向のパディング。
  • pady: 縦方向のパディング。
  • rowspan: ウィジェットが占める行数。
  • columnspan: ウィジェットが占める列数。

place()

place()は、ピクセル単位で配置するためのメソッドです。
このメソッドは、ウィジェットの位置やサイズを非常に詳細に制御することができます。
従って、絶対位置指定に向いています。

import tkinter

# メインウィンドウを作成
root = tkinter.Tk()

#画面サイズ
root.geometry("200x150")

# ラベルを作成
label1 = tkinter.Label(root, text="Label 1")
label2 = tkinter.Label(root, text="Label 2")
label3 = tkinter.Label(root, text="Label 3")

# placeによる配置
label1.place(x=10, y=10)
label2.place(x=50, y=50)
label3.place(x=100, y=100, width=80, height=40)

# メインループを開始
root.mainloop()

xyオプションを使用して、ウィジェットの左上隅の座標を(0,0)として指定します。
widthheightオプションを使用して、ウィジェットのサイズを指定しています。

pack()、grid()よりも複雑にはなりますが、より細かく配置するときにおすすめです。

place()のパラメータ
  • x: X座標。
  • y: Y座標。
  • relx: X座標の相対位置(0.0から1.0の範囲)。
  • rely: Y座標の相対位置(0.0から1.0の範囲)。
  • anchor: ウィジェットのどの部分を基準に配置するか(”n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”)。

メソッドの比較

ここまで、3つのメソッドの配置性と複雑性をそれぞれの以下のようになります。

pack() grid() place()
配置性
複雑性

ラベルを使うときは、表からも分かるようにplace()が最も配置しやすいのでおすすめです。
しかし、小規模のプログラムの場合にはpack()を使い、使用用途が多いのはpack()です。

UdemyでPythonを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。




Tkinter画面クリックでテキスト表示を変える

テキストの色や背景、フォントを変更し、クリックしたときにテキストを変更します。
このような機能をイベントハンドラと言います。

イベントハンドラとは、特定のイベントが発生したときに実行される関数のことです。
Tkinterでは、bindメソッドを使用してウィジェットにイベントハンドラを設定します。

キー押下やマウス移動のようなイベントを追加できます。

bindメソッドを解説しています。

bindメソッドでイベントを追加します。

ソースコード

import tkinter as tk

# メインウィンドウを作成
root = tk.Tk()

# 画面サイズ
root.geometry("300x200")

# ラベルの元のテキスト
original_text = "Sample Label"

# ラベルを作成
label = tk.Label(
    root,
    text=original_text,               # ラベルに表示するテキスト
    font=("Helvetica", 16, "bold"),   # テキストのフォント設定
    fg="blue",                        # テキストの色(フォアグラウンドカラー)
    bg="#ffffe0",                     # 背景色
    width=20,                         # ラベルの幅(文字数単位)
    height=2,                         # ラベルの高さ(行数単位)
    padx=10,                          # 横方向のパディング
    pady=10,                          # 縦方向のパディング
    borderwidth=5,                    # 枠線の幅
    relief="groove",                  # 枠線のスタイル(平面、浮き彫り、沈み込みなど)
    anchor="center",                  # テキストや画像の配置(中央)
    justify="center"                  # 複数行テキストの行揃え(中央揃え)
)

# 配置方法を選択する(いずれかのコメントを外す)
label.pack()
#label.grid(row=0, column=0)
#label.place(x=50, y=50)

# イベントハンドラの設定
def on_label_click(event):
    label.config(text="Label Clicked!")
    # 1秒後にテキストを元に戻す
    label.after(1000, lambda: label.config(text=original_text))

label.bind("<Button-1>", on_label_click)

# メインループを開始
root.mainloop()

解説

tk.Tkメソッド
メインウィンドウを作成します。
Tkinterのアプリケーションの基本的なウィンドウを初期化するために使用される。

geometryメソッド
メインウィンドウのサイズを設定します。サイズは「300×200」に設定しています。

Labelメソッド
ラベルウィジェットを作成します。
はrootウィンドウ内に配置し、属性を設定しています。

configメソッド
ウィジェットの属性を変更する。
labelのテキストを「alicia-ing」に変更するために使用されています。

afterメソッド
指定した時間(ミリ秒)後にコールバック関数を呼び出します。
1秒後にラベルのテキストを元の「アリッシアの朝」に戻すために使用されています。

bindメソッド
イベントハンドラをウィジェットにバインドします。
labelがクリックされたときにon_label_click関数を呼び出すために使用されています。

まとめ

本記事では、Tkinterを使ってラベルを作る方法を紹介しました。

配置のメソッドは、pack()、grid()、place()があり、
左から、簡易的に作ることができますが、配置がしにくいです。

また、fg、bg属性を使用すれば、テキストの色と背景色を変更できて、
font属性は、タプル形式でフォント名、サイズ、太さの順で指定します。

Tkinterを使用する際は、「root.mainloop()」を忘れやすいので、注意しましょう。

Udemyで学習する
タイトルとURLをコピーしました