常駐アプリを作ってみたい
お手軽にタイトルみたいな事ができないかと調べていたときに 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