[Python] pystray 모듈로 트레이 앱 만들어보기 Develop Tip

윈도우 시스템에 보면 하단 Tray에 보이게 하는 App이 있습니다.
물론 윈도우 뿐만 아니라 리눅스, Mac 등에도 모두 tray Icon에 해당되는 App이 있지요.

이런 Tray Icon 프로그램을 가능하게 하는 것이 바로 
pystry 입니다.

원래 하나의 모듈로 Windows, Linux, Mac 을 모두 지원한다고 하지만, 이번에 데비안 계열의 리눅스에서만 확인해 보았습니다.

우선 설치는 

pystray
Pillow

두 개의 파이썬 모듈을 설치하고,

import gi
import pystray
import pystray._gtk
import pystray._appindicator
import pystray._xorg
from pystray import MenuItem as item
from PIL import Image

def action():
    print('action clicked')

image = Image.open("at.png")
# menu = (item('Action 1', action), item('Action 2', action))
menu = (item('Help', action), item('About', action),)
icon = pystray.Icon("Test Icon 1", image, "Test Icon 1", menu)
icon.run()

위의 코드를 실행시켜보았습니다.

그런데,

Traceback (most recent call last):
  File "gooroom-tray.py", line 1, in <module>
    import gi
ModuleNotFoundError: No module named 'gi'

와 같은 오류가 발생하였습니다.

이제는 gi 모듈을 설치하는 것인데,
다음과 같은 세 가지 방법 중 하나를 시도해 보십시오.

어떤 시스템에서는 2번째 방법으로, 어떤 시스템에서는 1번 혹은 3번째 방법으로 성공했습니다.

1. 데비안 계열에서

sudo apt-get install python3-gi

2. vext 이용 (VirtualEnv 인 경우)

pip install vext
pip install vext.gi

3. pip 이용

sudo apt-get install pkg-config libcairo2-dev gcc python3-dev libgirepository1.0-dev
pip install gobject PyGObject

다만 이렇게 설치하면 대부분 gi 모듈은 시스템 모듈에 설치됩니다만,
나중에 pyinstaller 로 작업할 경우에는 해당 gi를 찾아 virtual env 환경으로 복사해 이용했습니다.

그리고 위의 명령을 돌리면 


와 같이 트레이 아이콘에 잘 나오는 것을 확인할 수 있습니다.

다시 이렇게 만든 것을 pyinstaller 에서 작업을 해 보았습니다만,
그 결과 400 MB 넘는 파일이 만들어지는 이상한 현상이..
트레이 아이콘이 뜨는 무려 30초 이상 걸리는 말도 안되는...

그래서 --onefile 옵션을 주고 다시 아래와 같이 만들어,

pyinstaller -F --onedir tray.py

만들어진 dist/tra/에 들어가 확인해 보았더니,
share 안에 있는 icons 폴더에만 1GB 의 내용이 들어 있는 것이었습니다.

그래서 나중에는 share 안에 icons와 themes 두 폴더만 지우고
만들면 아직도 크지만 폴어서 80MB 정도 밖에 안되는 크기의 
실행모듈을 만들 수 있었습니다.

그리고 맥에서도 잠깐 시도를 해 보았는데,
역시 gi 모듈이 없다고 나와서 구글에서 검색해서 나온

brew install pygobject3 gtk+3

와 같이 주고 해 보았는데 아직 안되는 군요.
나중에 윈도우와 함께 시도해 보고 되면 업데이트 해야 되겠습니다.


어느 분께는 도움이 되셨기를..


덧글

댓글 입력 영역

구글애드텍스트