-
간단히 파이썬 트레이 아이콘(pystray) 사용하기(multiprocessing과 함께)프로그래밍/Python 2020. 11. 30. 23:14반응형
모듈 : pystray
간단하게 트레이 아이콘형태로 응용 프로그램을 제작하고 싶을 때 사용한다.
https://github.com/moses-palmer/pystray/blob/master/docs/usage.rst
사용법에는 PIL로 트레이 아이콘 이미지를 만드는 법이 소개되어있지만, 다음과 같이 사용해도 된다.
from pystray import MenuItem as item import pystray from PIL import Image def action(): pass image = Image.open("image.jpg") menu = (item('name', action), item('name', action)) icon = pystray.Icon("name", image, "title", menu) icon.run()
출처 : https://stackoverrun.com/ko/q/12905902
https://stackoverflow.com/questions/47095129/pystray-systray-icon
그리고
icon.stop()
은 트레이 아이콘의 작동을 중지시킨다.
추가적으로, pystray는 icon.run() 실행하면 그 이후의 코드들은 icon.stop()이 실행될때까지 실행되지 않는다.
이것을 해결하는 방법이 있을 것으로 생각되지만, 찾기가 어려워 필자는 multiprocessing 의 Process를 사용하는 것으로 대체했다.
기본적인 틀은 다음과 같다.
from pystray import MenuItem as item import pystray from PIL import Image from multiprocessing import Process, Queue def func1(q): if (not q.empty()) and str(q.get()) == 'stop': return False pass def action(): icon.stop() q.put('stop') if __name__ == '__main__': q = Queue() p_func1 = Process(target=func1, args=(q,)) p_func1.start() ##Below : Tray image = Image.open("image.jpg") menu = (item('종료', action), ) icon = pystray.Icon("name", image, 'title', menu) icon.run() ##Up : Tray q.close() q.join_thread() p_combine.join()
여기서 Queue()는 생성된 프로세스간 데이터를 주고받을 때 사용한다.
반응형'프로그래밍 > Python' 카테고리의 다른 글
python pynput모듈의 사용을 통한 마우스/키보드 제어 (0) 2020.12.01 pyautogui 메세지 출력 (0) 2020.11.30 파이썬: 복수 이미지(image)들을 모아 하나의 PDF로 변환하기(pillow(PIL)모듈) (0) 2020.11.25 파이썬 CGI (0) 2020.10.07 Python : 모스코드를 소리로 나타내기 (0) 2020.09.06