LoginSignup
7
8

More than 1 year has passed since last update.

Windows のタスクトレイに Python アプリを常駐させ定期的にプログラムを実行する

Posted at

常駐アプリを作ってみたい

お手軽にタイトルみたいな事ができないかと調べていたときに pystray というライブラリを知ったので参考資料を見ながら作成してみました。
ご指摘やアドバイス等あればコメント頂きたいです。

環境

  • Windows 10
  • Python 3.9
  • 追加ライブラリ
    • pystray
    • schedule

プログラム

中身を確認しながら自己責任で実行してください。
アイコン (sample.jpeg) は ICOON MONO さんのフリー素材を使用しました。

tray.py
from pystray import Icon, MenuItem, Menu
from PIL import Image
import time
import threading
import schedule

class taskTray:
    def __init__(self, image):
        self.status = False

        ## アイコンの画像
        image = Image.open(image)
        ## 右クリックで表示されるメニュー
        menu = Menu(
                    MenuItem('Task', self.doTask),
                    MenuItem('Exit', self.stopProgram),
                )

        self.icon = Icon(name='nameTray', title='titleTray', icon=image, menu=menu)


    def doTask(self):
        print('実行しました。')

    def runSchedule(self):
        ## 5秒毎にタスクを実行する。
        schedule.every(5).seconds.do(self.doTask)
        ## status が True である間実行する。
        while self.status:
            schedule.run_pending()
            time.sleep(1)

    def stopProgram(self, icon):
        self.status = False

        ## 停止
        self.icon.stop()

    def runProgram(self):
        self.status = True

        ## スケジュールの実行
        task_thread = threading.Thread(target=self.runSchedule)
        task_thread.start()

        ## 実行
        self.icon.run()


if __name__ == '__main__':
    system_tray = taskTray(image="sample.jpeg")
    system_tray.runProgram()

実行結果

プログラムを実行すると5秒毎に print します。右クリックで Task をクリックしても実行します。
Exit をクリックすればプログラムを終了します。

参考資料

github: OtagoPolytechnic/CommandLineSpeechControl/Developers/systray.py

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8