Python
 Computer >> コンピューター >  >> プログラミング >> Python

Tkinterでシステムトレイアプリケーションを作成する方法【pystrayの使い方を解説】

システムトレイアプリケーションは、プログラムをバックグラウンドで継続的に実行するために作られます。ユーザーがウィンドウを閉じても、アプリケーションはタスクバー(通知領域)上で動作状態を保ちます。システムトレイアプリであることを視覚的に識別できるよう、アイコンや画像を設定するのが一般的です。

pystrayモジュールとは

Tkinterアプリケーションにシステムトレイアイコンを実装するには、Pythonの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()

実行結果

上記のコードを実行すると、まず通常のアプリケーションウィンドウが表示されます。

ウィンドウの閉じるボタン(×)を押すと、ウィンドウは非表示になりますが、プログラムは終了せず、タスクバーの通知領域にシステムトレイアプリとして常駐し続けます。

ポイント解説

  • win.protocol('WM_DELETE_WINDOW', hide_window):ウィンドウの×ボタンがクリックされた際のデフォルト動作(終了)を、hide_window関数による非表示処理に置き換えています。

  • icon.stop():ShowやQuitを選択した際にトレイアイコンのループ処理を停止し、Tkinter側の処理へ制御を戻すために呼び出しています。

  • favicon.ico:トレイに表示するアイコン画像ファイルです。プロジェクトと同じディレクトリに配置しておく必要があります。

この仕組みを応用すれば、常駐型ツールやバックグラウンド監視アプリなど、ユーザーが意識せずに動き続けるデスクトップアプリケーションを簡単に開発できます。

  1. Tkinterでテキストウィジェットを読み取り専用(無効化)にする方法

    Tkinterでは、テキストウィジェットを無効化(disabled)したいケースがあります。これを実現するには、テキストウィジェットの state オプションを DISABLED に設定します。こうすることでテキストウィジェットがフリーズし、読み取り専用の状態になります。この記事では、テキストウィジェットとボタンを作成し、ボタンをクリックするとテキストウィジェットを即座に無効化できるサンプルを紹介します。コード例# ライブラリのインポート from tkinter import * # ウィンドウのインスタンスを作成 win = Tk() # ウィンドウのサイズを設定 win.geomet

  2. Macの「Launchpad」を使いこなそう!知っておきたい便利な活用テクニック

    Macユーザーの間で、お気に入りの機能として真っ先に名前が挙がることは少ないのが「Launchpad(ランチパッド)」かもしれません。とはいえ、LaunchpadはmacOSにインストールされたすべてのアプリを一覧表示し、整理整頓するための便利なツールです。残念ながら、Appleはここ数年この機能に大きなアップデートを加えていません。多くのMacユーザーがSpotlightを好んで使う傾向にあることがその理由と考えられます。しかし、更新がないからといって見過ごすのはもったいないことです。使い方をしっかり理解すれば、Launchpadは非常に強力なツールになります。ここでは、MacのLaunch