-
간단히 파이썬 트레이 아이콘(pystray) 사용하기(multiprocessing과 함께)프로그래밍/Python 2020. 11. 30. 23:14반응형
모듈 : pystray
간단하게 트레이 아이콘형태로 응용 프로그램을 제작하고 싶을 때 사용한다.
https://github.com/moses-palmer/pystray/blob/master/docs/usage.rst
moses-palmer/pystray
Contribute to moses-palmer/pystray development by creating an account on GitHub.
github.com
사용법에는 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