PythonのTkinterでスレッドを使う方法|threadingモジュールによる非同期処理の基本
Tkinterでは、スレッド(Threading)を活用することで、複数の関数を同時に実行できます。これにより、アプリケーション内の処理を非同期で動かすことが可能になります。
Pythonでスレッドを使用するには、まずthreadingモジュールをインポートし、そのThreadクラスを継承した新しいクラスを定義します。そして、クラス内でrunメソッドをオーバーライドし、実行したい処理をその中に記述します。
つまり、スレッドを使えば複数の作業を並行して進めることができます。Tkinterアプリケーションでスレッドを実現する際は、Thread()関数を利用します。
ここでは、「一定時間スリープした後、別の処理を並行して実行するスレッド」を作成する例を紹介します。
このサンプルでは、timeモジュールとthreadingモジュールをインポートして使用します。
コード例
# 必要なライブラリをインポート
from tkinter import *
import time
import threading
# Tkinterのウィンドウを作成
win = Tk()
# ウィンドウサイズを指定
win.geometry("700x400")
# スレッドで実行する関数を定義
def thread_fun():
label.config(text="ボタンをクリックするか、そのままお待ちください")
time.sleep(5)
label.config(text="5秒が経過しました!")
# ラベルを作成
label = Label(win)
label.pack(pady=20)
# ボタンを作成(クリック時にスレッドを開始)
b1 = Button(win, text="Start", command=lambda: threading.Thread(target=thread_fun).start())
b1.pack(pady=20)
win.mainloop()
ポイント: ボタンの command オプションには「関数の実行結果」ではなく「実行したい処理」を渡す必要があります。そのため、ここでは lambda を使ってスレッドの起動処理を渡しています。こうすることで、ボタンがクリックされたタイミングでスレッドが開始されます。
実行結果
上記のコードを実行するとボタンが表示され、クリックするとラベルを操作するスレッドが起動します。

5秒後、スレッドは自動的に停止し、ラベルの表示が切り替わります。

-
Tkinterで画像をボタンとして使う方法をわかりやすく解説
Tkinterでは、画像ファイルをそのままボタンとして表示することができます。この記事では、角丸の画像ボタンを作成する方法を、実際のコード例とともに解説します。ここで紹介する手法は、フォーム、ゲーム、ダイアログボックスなど、さまざまなアプリケーションに応用できる汎用的なテクニックです。 画像ボタンの作り方の基本 Tkinterで見栄えの良い角丸ボタンを作る最も簡単な方法は、あらかじめ用意したボタン用の画像を、クリック可能なウィジェットとして配置することです。これを実現するのがPhotoImage()関数で、指定した画像ファイルを読み込んでボタンに渡すことができます。 具体的には、以下の手順で画
-
Python Tkinterでキャンバス上の画像を中央に配置する方法
Tkinterを使ってGUIアプリケーションを開発している際、Tkinterのキャンバス(Canvas)上に画像を読み込みたいケースはよくあります。本記事では、その画像をキャンバスの中央に配置する方法を解説します。anchorパラメータとはデフォルトでは、キャンバスは画像を自身の幅と高さに従って配置します。しかし、anchor(アンカー)パラメータに方向の値を渡すことで、画像の位置を任意の方向(N:北、S:南、E:東、W:西、NS、EWなど)に操作できます。アンカーは画像関数と一緒に呼び出されるパラメータで、キャンバス内における画像の方向や位置を定義します。このanchorパラメータを活用すれ