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になり、逆にしないことに注意してください。
- tkinter.CENTER:中央
- tkinter.N:上
- tkinter.S:下
- tkinter.W:左
- tkinter.E:右
- tkinter.NW:左上
- tkinter.NE:右上
- tkinter.SW:左下
- tkinter.SE:右下
sideやanchorの他にもパラメータを指定することができます。
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()
rowとcolumnオプションを使用することで、ラベルを配置する行と列を指定することができます。また、columnspanオプションを使用することで、列にまたがるようにしています。
自動的に配置するpack()よりも複雑にはなりますが、細かく配置したいときにおすすめです。
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()
xとyオプションを使用して、ウィジェットの左上隅の座標を(0,0)として指定し、widthとheightオプションを使用して、ウィジェットのサイズを指定しています。
pack()、grid()よりも複雑にはなりますが、より細かく配置するときにおすすめです。
メソッドの比較
ここまで、3つのメソッドの配置性と複雑性をそれぞれの以下のようになります。
pack() | grid() | place() | |
配置性 | 低 | 中 | 高 |
複雑性 | 低 | 中 | 高 |
個人的にラベルを使うときは、表からも分かるようにplace()が最も配置しやすいのでおすすめです。
Pythonの学習進め方
Pythonでできることは多岐に渡ります。
Pythonは強力で柔軟なプログラミング言語ですが、常に情報がアップデートされるので、
新しいライブラリやフレームワークを独学で学び続けることは困難です。
Udemyは動画で目的に応じた講座を受講できるのでレベルを合わせて学習できます。
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで独学できます。
Pythonでデータサイエンスや人工知能、GUIを学びたい人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を5つ紹介します。
ビックセール開催中(10月11日まで)
対象のコースが1500円から(最大95%OFF)
Pythonをインストールから環境設定、基本文法が学習できる。さらに、モジュールの使い方やファイル操作の他に暗号化、並列化、インフラ自動化、キューイングシステム、非同期処理についても学べます。
Pythonの基礎を押さえつつ、人口知能やニューラルネットワーク、機械学習を取り扱う。機械学習ライブラリで文字認識や株価分析などを行う。
データサイエンティストになるために必要なツールについて学ぶことができる。統計分析、NumpyやPandasなどを使ったPythonのプログラミング、機械学習の実装、ディープラーニングの実装を学習できる。
PythonでGUIを作成する方法を取り扱う。Tkinterの発展的な操作まで学習できる。翻訳アプリ、家計簿アプリ、電卓アプリ、音楽再生アプリなど作成して、exeファイル化する。
イベントハンドラ
イベントハンドラとは、特定のイベントが発生したときに実行される関数のことです。
Tkinterでは、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()」を忘れやすいので、注意しましょう。