Tkinterアプリでシステムトレイアイコンを作成する方法【pystray活用ガイド】
システムトレイアイコンは、アプリケーションの実行状態をタスクバーに表示するための機能です。現在どのアプリケーションが動作しているかをひと目で確認でき、ウィンドウを閉じた後もバックグラウンドで動作し続けるアプリによく使われています。
Tkinterアプリケーションでシステムトレイアイコンを作成するには、Pythonのpystrayモジュールを使用します。pystrayには、トレイアイコンの設定やメニュー操作に便利な組み込み関数・メソッドが多数用意されています。
pystrayのインストール方法
まず、以下のコマンドを実行してpystrayをインストールしてください。シェルまたはコマンドプロンプトから実行できます。
pip install pystray
システムトレイアイコン作成の手順
必要なライブラリをインポートする ― pystrayと、画像処理用のPIL(Pillow)。
ウィンドウを非表示にしてトレイアイコンを表示するためのhide_window()関数を定義する。
「表示(Show)」と「終了(Quit)」の2つのメニュー項目を追加・定義する。
ShowとQuitそれぞれに対応する関数を定義し、メニュー項目にコマンドとして割り当てる。
サンプルコード
# 必要なライブラリをインポート
from tkinter import *
from pystray import MenuItem as item
import pystray
from PIL import Image, ImageTk
# Tkinterのフレーム(ウィンドウ)のインスタンスを作成
win = Tk()
win.title("System Tray Application")
# ウィンドウサイズを設定
win.geometry("700x350")
# ウィンドウを終了する関数
def quit_window(icon, item):
icon.stop()
win.destroy()
# ウィンドウを再表示する関数
def show_window(icon, item):
icon.stop()
win.after(0, win.deiconify())
# ウィンドウを隠してタスクバー(システムトレイ)に表示
def hide_window():
win.withdraw()
image = Image.open("favicon.ico")
menu = (item('Quit', quit_window), item('Show', show_window))
icon = pystray.Icon("name", image, "My System Tray Icon", menu)
icon.run()
# ウィンドウの×ボタンが押されたときにhide_windowを呼び出す
win.protocol('WM_DELETE_WINDOW', hide_window)
win.mainloop()
実行結果
上記のコードを実行すると、通常どおりウィンドウが表示されます。

ウィンドウの閉じるボタンを押すと、ウィンドウは消えますが、タスクバーにはシステムトレイアイコンとして残り続けます。トレイアイコンを右クリックすると「Show」「Quit」のメニューが表示され、ウィンドウの再表示やアプリの完全な終了が可能です。

ポイント解説
この仕組みの鍵となるのはwin.protocol('WM_DELETE_WINDOW', hide_window)の部分です。通常、ウィンドウの閉じるボタンを押すとアプリは終了しますが、このプロトコルを上書きすることで、閉じる操作を「ウィンドウを隠してトレイに格納する」動作に変更できます。
また、icon.stop()を呼び出さないとトレイアイコンが残り続けるため、ShowやQuitの各関数内で必ず停止処理を行うことが重要です。常駐型ツールやバックグラウンド監視アプリなどを作成する際に、ぜひ活用してみてください。
-
Tkinterで簡単な画面(ウィンドウ)を作成する方法【初心者向け】
Pythonの標準GUIライブラリ「Tkinter」を使えば、わずか数行のコードで簡単な画面(ウィンドウ)を作成できます。追加のインストールは不要で、Pythonさえあればすぐに試せるのが魅力です。この記事では、Tkinterによる基本的なウィンドウの作り方を手順付きで解説します。 作成手順(アルゴリズム) シンプルな画面を作る流れは、以下の3ステップです。 ステップ1:tkinterモジュールをインポートする ステップ2:Tkクラスのオブジェクト(ウィンドウ)を作成する ステップ3:イベントループを開始して画面を表示する サンプルコード import tkinter as tk # ウィン
-
Tkinterでスプラッシュ画面を作成する方法をわかりやすく解説
アプリケーションを起動した際に一瞬だけ表示される「スプラッシュ画面」。ロゴや読み込み中表示などを映し出すことで、アプリに洗練された印象を与えられます。Pythonの標準GUIライブラリであるTkinterを使えば、このスプラッシュ画面も簡単に実装できます。スプラッシュ画面作成の基本手順Tkinterでスプラッシュ画面を作成するには、以下の手順に従います。ラベルなどを配置したスプラッシュ画面を作成するoverrideredirectメソッドを使って、スプラッシュ画面を枠なし(ボーダーレス)にするスプラッシュ画面の直後に表示されるメインウィンドウを生成する関数を定義するafterメソッドを使って、