Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter로 시스템 트레이 애플리케이션 만드는 방법 (pystray 완벽 가이드)

시스템 트레이(System Tray) 애플리케이션은 프로그램을 백그라운드에서 지속적으로 실행하기 위해 사용됩니다. 사용자가 창을 닫더라도 애플리케이션이 완전히 종료되지 않고 작업표시줄의 트레이 영역에서 계속 실행 상태를 유지하는 방식입니다. 이러한 트레이 애플리케이션은 고유한 이미지나 아이콘을 통해 식별할 수 있습니다.

pystray 모듈 소개

Tkinter 애플리케이션에 시스템 트레이 아이콘을 추가하려면 파이썬의 pystray 모듈을 활용할 수 있습니다. pystray는 Windows, macOS, Linux를 지원하며, 트레이 아이콘을 구성하고 메뉴를 관리할 수 있는 다양한 내장 함수와 메서드를 제공합니다.

설치는 셸 또는 명령 프롬프트에서 다음 명령어를 입력하면 됩니다.

pip install pystray

구현 단계

  • 필요한 라이브러리 임포트pystray와 이미지 처리를 위한 PIL(Pillow)
  • hide_window() 함수 정의 — 창을 숨기고( withdraw ) 트레이에 아이콘을 표시하는 역할
  • 메뉴 항목 추가 — "Show"(창 다시 열기)와 "Quit"(종료) 두 개의 메뉴 정의
  • 명령 연결 — 각 메뉴 항목에 실행될 콜백 함수를 정의하여 연결

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from pystray import MenuItem as item
import pystray
from PIL import Image, ImageTk

# tkinter 프레임 또는 윈도우 인스턴스 생성
win = Tk()

win.title("System Tray Application")
# 윈도우 크기 설정
win.geometry("700x350")

# 윈도우를 종료하는 함수
def quit_window(icon, item):
    icon.stop()
    win.destroy()

# 숨겨진 윈도우를 다시 표시하는 함수
def show_window(icon, item):
    icon.stop()
    win.after(0, win.deiconify())

# 창을 숨기고 시스템 트레이에 아이콘 표시
def hide_window():
    win.withdraw()
    image = Image.open("favicon.ico")
    menu = (item('Quit', quit_window), item('Show', show_window))
    icon = pystray.Icon("name", image, "My System Tray Icon", menu)
    icon.run()

# 창 닫기 버튼 클릭 시 hide_window 함수 호출
win.protocol('WM_DELETE_WINDOW', hide_window)

win.mainloop()

실행 결과

위 코드를 실행하면 다음과 같이 애플리케이션 창이 화면에 나타납니다.

Tkinter로 시스템 트레이 애플리케이션 만드는 방법 (pystray 완벽 가이드)

창의 닫기(X) 버튼을 누르면 프로그램이 종료되지 않고, 대신 작업표시줄 트레이 영역에 아이콘 형태로 계속 실행됩니다.

Tkinter로 시스템 트레이 애플리케이션 만드는 방법 (pystray 완벽 가이드)

동작 원리 요약

핵심은 win.protocol('WM_DELETE_WINDOW', hide_window) 부분입니다. 일반적으로 창 닫기 버튼을 누르면 애플리케이션이 종료되지만, 이 프로토콜 핸들러를 hide_window()에 연결함으로써 창을 숨기고 pystray 아이콘을 트레이에 띄우도록 동작을 변경합니다. 이후 트레이 아이콘의 우클릭 메뉴에서 "Show"를 선택하면 deiconify()를 통해 창이 복원되고, "Quit"을 선택하면 icon.stop()win.destroy()로 트레이 아이콘과 애플리케이션이 함께 종료됩니다.