【Python】Tkinterを使ったラベル作成の方法と使い方、カスタマイズの解説

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

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

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

ラベルは、短いテキストを表示することを目的とし、その使い道は多岐に渡っています。
Pythonを配布するときは著作権表示(coperight)を表示を必須としているので、
ソフト内に表示する場合はラベルの使用が有効です。

ラベルの使用用途
  • フォームや入力画面の名前や説明の表示
  • アプリケーション内のテキストの表示
  • エラーメッセージや警告の表示
  • ボタンやアイコンの説明の表示
  • 画像の説明の表示

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

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

画面(ウィンドウ)作成

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

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()メソッドのカッコ内に記入します。

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.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()が最も配置しやすいのでおすすめです。

Pythonの学習進め方

Pythonでできることは多岐に渡ります。

Pythonでできること
  • 機械学習・人工知能
  • データ解析・統計分析
  • ファイル操作・システム管理
  • GUIアプリ開発

Pythonは強力で柔軟なプログラミング言語ですが、常に情報がアップデートされるので、
新しいライブラリやフレームワークを独学で学び続けることは困難です。

Udemyは動画で目的に応じた講座を受講できるのでレベルを合わせて学習できます。
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで独学できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Pythonでデータサイエンスや人工知能、GUIを学びたい人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を5つ紹介します。

Pythonをインストールから環境設定、基本文法が学習できる。さらに、モジュールの使い方やファイル操作の他に暗号化、並列化、インフラ自動化、キューイングシステム、非同期処理についても学べます。

Pythonの基礎を押さえつつ、人口知能やニューラルネットワーク、機械学習を取り扱う。機械学習ライブラリで文字認識や株価分析などを行う。

データサイエンティストになるために必要なツールについて学ぶことができる。統計分析、NumpyやPandasなどを使ったPythonのプログラミング、機械学習の実装、ディープラーニングの実装を学習できる。

PythonでGUIを作成する方法を取り扱う。Tkinterの発展的な操作まで学習できる。翻訳アプリ、家計簿アプリ、電卓アプリ、音楽再生アプリなど作成して、exeファイル化する。

イベントハンドラ

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

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

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

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

テキストの色や背景、フォントを変更し、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()」を忘れやすいので、注意しましょう。

タイトルとURLをコピーしました