tray_manager PyStray (https://github.com/moses-palmer/pystray by Moses Palmér)를 기반으로 시스템 트레이 아이콘을 만드는 데 사용되는 패키지이며,이 패키지는 객체 사용을 기반으로 조작하기위한 "더 쉬운"Pystray 버전입니다.
tray_manager 는 pypi (https://pypi.org/project/tray-manager/)에서 publisehd이며 다음 명령을 사용하여 다운로드 할 수 있습니다.
pip install tray-manager메모
컴퓨터에 Python을 설치해야합니다
Librairy의 주요 객체는 tray_manager.TrayManager 객체이며 중심 요소이며 시스템 트레이 자체의 아이콘으로 간주 될 수 있습니다. 여기에는 앱의 모든 요소가 포함되어 있습니다.
하나를 만들려면 tray_manager.TrayManager 클래스를 가져 와서 다음과 같이 트레이 객체를 만들어야합니다.
from tray_manager import TrayManager
my_tray = TrayManager ( app_name = "My App" ) 앱을 중지하려면 다음과 같이 .kill() 함수를 사용해야합니다.
메모
.kill() 함수는 메뉴에 포함 된 모든 항목을 항목 목록으로 반환합니다.
from tray_manager import TrayManager , Label , Button
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu
def my_callback ():
print ( "Hello" )
my_label = Label ( "My Label" )
my_button = Button ( "My Button" , my_callback )
my_menu . add ( my_label )
my_menu . add ( my_button )
my_tray . kill ()
- > [ my_label , my_button ]중요한
당신이 죽인 메뉴와 traymanager 개체는 쓸모 없게됩니다.
경고
tray_manager.TrayManager 객체를 만들면 내부 루프가 생성 되 자마자 실행됩니다. 즉, tray_manager.TrayManager 객체를 작성하면 나머지 코드가 차단됩니다. 이를 방지하기 위해 두 가지 옵션이 있습니다.
tray_manager.TrayManager 개체의 setup 인수로 함수를 지정할 수 있습니다.이 기능은 객체를 만들 때 새 스레드에서 시작됩니다.
(Windows 만 해당) Windows에 있고 다른 플랫폼과의 호환성에 대해 걱정하지 않는 경우 tray_manager.TrayManager 객체의 run_in_separate_thread 인수를 True 로 설정할 수 있습니다. 이렇게하면 새 스레드에서 tray_manager 루프가 시작되며 나머지 코드는 메인 루프에서 올바르게 실행됩니다.
항목은 앱의 요소이며 추가 메뉴에 표시됩니다. 그것들은 모두 비슷한 방식으로 작동하는 다른 종류의 항목이지만 각각의 특이성이 있습니다.
다음은 모든 항목의 목록입니다.
레이블은 가장 기본적인 항목이며 텍스트 만 구성됩니다.
하나를 만들려면 tray_manager.Label 클래스를 사용하십시오.
from tray_manager import Label
my_label = Label ( "My Label" )버튼은 레이블 항목과 같지만 사용자가 버튼을 클릭 할 때 호출되는 콜백 인수 (functionType)를 추가 할 수 있습니다. 버튼을 클릭 할 때 기능으로 전달되는 튜플로 일부 인수를 지정할 수도 있습니다.
하나를 만들려면 tray_manager.Button 클래스를 사용하십시오.
from tray_manager import Button
def my_callback ( text : str ) -> None :
print ( text )
my_button = Button ( "My Button" , my_callback , args = ( "Hello" ,))체크 박스 항목은 일반 버튼보다 약간 더 복잡하며 1 대신 2 개의 다른 콜백이 있고 각각의 인수에 대한 인수가 있습니다. 하나는 '비활성화'에서 '사용 된'상태로 확인란을 전환하고 (확인되지 않은 상태로 확인되지 않음) '사용'상태에서 '비활성화 된'상태로 전환 할 때 (점검되지 않도록 확인).
check_default 의 값을 None 으로 설정하여 확인란과의 상호 작용을 '비활성화'할 수 있습니다.
메모
사용자가 비활성화 된 경우 확인란을 클릭하면 콜백이 실행되지 않습니다.
하나를 만들려면 tray_manager.CheckBox 클래스를 사용하십시오.
from tray_manager import CheckBox
def checked ( text : str ) -> None :
print ( f"In procedure 'checked' : { text } " )
def unchecked ( text : str ) -> None :
print ( f"In procedure 'unchecked' : { text } " )
my_checkbox = CheckBox ( "My CheckBox" , check_default = False , checked_callback = checked , checked_callback_args = ( "I'm now checked" ,),
unchecked_callback = unchecked , unchecked_callback_args = ( "I'm now unchecked" ,)) 확인란의 현재 상태를 얻으려면 다음과 같이 .get_status() 함수를 사용할 수 있습니다.
from tray_manager import CheckBox
my_checkbox = CheckBox ( "My CheckBox" )
my_checkbox . get_status ()
- > bool | None 다음과 같이 .set_status() 함수를 사용하여 확인란의 상태를 설정할 수도 있습니다.
from tray_manager import CheckBox
my_checkbox = CheckBox ( "My CheckBox" )
my_checkbox . set_status ( True )
- > Checked
my_checkbox . set_status ( False )
- > Unchecked
my_checkbox . set_status ( None )
- > Disabled 메모
| 확인란 | 상태 |
|---|---|
| 확인 | True |
| 확인되지 않았습니다 | False |
| 장애가 있는 | None |
확인란이 비활성화되면 이전 상태에 머무르고 상호 작용을 중지합니다. 이는 비활성화되기 전에 확인란을 확인하면 확인란이 확인되지만 사용자가 클릭하면 아무 일도 일어나지 않습니다.
분리기는 PyStray의 내장 객체이며 매개 변수가 없습니다.
하나를 만들려면 tray_manager.Separator 클래스를 사용하십시오.
from tray_manager import Separator
my_separator = Separator () 하위 메뉴는 tray_manager.Menu 객체와 같으며 다른 하위 메뉴를 포함한 다른 항목을 포함 할 수 있습니다.
주의
추가하는 하위 메뉴에 하위 메뉴를 추가하여 추가하는 하위 메뉴를 추가하면 tray_manager.CircularAddException 오류가 생성됩니다.
흐름도 TD
a {my submenu} -> b (내 레이블)
A-> C (내 버튼)
a -> d {내 두 번째 하위 메뉴}
D-> e (내 두 번째 레이블)
D-> F (내 확인란)
d-> | tray_manager.circularAddexception | 에이
하나를 만들려면 tray_manager.Submenu 를 사용하십시오.
from tray_manager import Submenu
my_submenu = Submenu ( "My Submenu" ) 하위 메뉴에 항목을 추가하려면 다음과 같이 .add() 함수를 사용하십시오.
from tray_manager import Submenu , Label
my_submenu = Submenu ( "My Submenu" )
my_label = Label ( "My Label" )
my_submenu . add ( my_label ) 하위 메뉴에서 항목을 제거하려면 다음과 같이 .remove() 함수를 사용하십시오.
from tray_manager import Submenu , Label
my_submenu = Submenu ( "My Submenu" )
my_label = Label ( "My Label" )
my_submenu . add ( my_label )
my_submenu . remove ( my_label )
- > my_label 메모
.remove() 함수는 제거 된 항목을 반환합니다
하위 메뉴에 포함 된 항목을 얻으려면 다음과 같이 .get_items() 함수를 사용하십시오.
from tray_manager import Submenu , Label , Button
def my_callback ()
print ( "Hello" )
my_submenu = Submenu ( "My Submenu" )
my_label = Label ( "My Label" )
my_button = Button ( "My Button" , my_callback )
my_submenu . add ( my_label )
my_submenu . add ( my_button )
my_submenu . get_items ()
- > [ my_label , my_button ] tray_manager.Menu 는이 라이브러리의 중심 요소 중 하나이며 하위 메뉴처럼 작동하며 tray_manager.TrayManager.menu 객체로 tray_manager.TrayManager 객체를 만들 때 자동으로 생성됩니다.
경고
OS에서 Disconibility에 대해 tray_manager.OsSupport.HAS_MENU 확인하십시오. OS가 메뉴를 지원하지 않으면 tray_manager.TrayManager.menu 객체는 없을 것입니다.
메뉴를 사용하려면 tray_manager.TrayManager.menu 객체를 다음과 같이 acc습니다.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu 메뉴에 항목을 추가하려면 다음과 같이 .add() 함수를 사용하십시오.
from tray_manager import TrayManager , Label
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu
my_label = Label ( "My Label" )
my_menu . add ( my_label ) 메뉴에서 항목을 제거하려면 다음과 같이 .remove() 함수를 사용할 수 있습니다.
from tray_manager import TrayManager , Label
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu
my_label = Label ( "My Label" )
my_menu . add ( my_label )
my_menu . remove ( my_label )
- > my_label 메모
.remove() 함수는 제거 된 항목을 반환합니다.
메뉴에 포함 된 항목을 얻으려면 다음과 같이 .get_items() 함수를 사용할 수 있습니다.
from tray_manager import TrayManager , Menu , Label , Button
def my_callback ()
print ( "Hello" )
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu
my_label = Label ( "My Label" )
my_button = Button ( "My Button" , my_callback )
my_menu . add ( my_label )
my_menu . add ( my_button )
my_menu . get_items ()
- > [ my_label , my_button ] 메뉴 항목 (메뉴 내부에 포함 된 항목)을 업데이트하려면 .update() 함수를 사용하십시오.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu
my_menu . update ()메모
.update() 함수는 메뉴에서 항목을 편집, 추가 또는 제거 할 때마다 자동으로 트리거됩니다.
다음과 같은 다른 방식으로 Traymanager 객체를 사용자 정의 할 수 있습니다.
앱의 새 이름을 설정하려면 다음과 같이 .set_app_name() 함수를 사용하십시오.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . set_app_name ( "My new App" ) tray_manager 아이콘의 메모리 시스템을 사용하여 앱의 새 아이콘을 설정하려면 먼저 .load_icon() 함수를 사용하여로드 한 다음 tray_manager.TrayManager 객체의 .set_icon() 함수를 사용하여 아이콘을 새 아이콘으로 설정해야합니다.
메모
기본적으로 아이콘은 32x32 픽셀의 흰색 사각형입니다. 기본 아이콘은 항상 메모리에로드되며 .set_icon() 함수의 name 인수로 tray_manager.Values.DEFAULT 를 전달하여 다시 설정할 수 있습니다.
아이콘을로드하려면 .load_icon() 함수를 사용하여 파일 경로, 인코딩 된 이미지, PIL.Image 객체 또는 PIL이 이미지로 읽고 해석 할 수있는 파일을 전달하십시오. 또한 아이콘의 아이콘에서 키로 사용될 이름을 전달하여 아이콘을 리테로 리드합니다.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . load_icon ( "my_icon_file_path.png" , "my_new_icon" )경고
tray_manager DictionNary를 사용하여로드 된 아이콘을 저장합니다. 즉, 이미 사용 된 이름을 사용하여 이미지를로드하면 이전에 해당 이름으로로드 된 이미지를 덮어 씁니다. 이것에 대한 유일한 예외는 편집 할 수없는 기본 아이콘입니다.
아이콘을 설정하려면 .set_icon() 함수를 사용하여 아이콘을로드 할 때 설정 한 아이콘의 이름 (키)을 전달하십시오.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . load_icon ( "my_icon_file_path.png" , "my_new_icon" )
my_tray . set_icon ( "my_new_icon" ) tray_manager.TrayManager 객체를 제거하는 대신 시스템 트레이에 표시를 중지하고 다시 필요한 경우 새 제품을 만들려면 앱이 tray_manager.TrayManager 트레이에서 표시되는지 여부를 제어하기 위해 .show() 및 .hide() 함수를 사용할 수 있습니다.
메모
tray_manager.TrayManager 객체를 작성할 때 tray_manager.TrayManager 객체의 default_show 인수를 True 또는 False 로 설정할 수 있습니다.
시스템 트레이에서 앱을 표시하려면 tray_manager.TrayManager 개체의 .show() 함수를 사용하십시오.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . show () 시스템 트레이에서 앱을 숨기려면 tray_manager.TrayManager 객체의 .hide() 함수를 사용하십시오.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . hide () 이미 생성 된 항목을 편집하려면 항목의 .edit() 함수를 사용하여 항목을 사용하면 변경할 인수 만 지정하면 다른 사람이 그와 동일하게 유지됩니다.
항목을 편집하려면 다음과 같이 수행하십시오.
from tray_manager import Button
def my_first_callback ():
print ( "Hello" )
my_button . edit ( callback = my_second_callback )
def my_second_callback ():
print ( "World !" )
my_button = Button ( "My Button" , my_first_callback )
# When clicking on the button, this will display :
# First click
- > Hello
# Second click
- > World !다음과 같은 다양한 방식으로 항목을 사용자 정의 할 수 있습니다.
항목을 표시하려고하지만 응답하지 않으려면 (버튼, 확인란 및 하위 메뉴의 경우) 비활성화 된 항목처럼 보이려면 항목의 .enable() 및 .disable() 함수를 사용할 수 있습니다.
메모
기본적으로 모든 항목이 활성화됩니다
분리기를 제외한 모든 항목을 비활성화 할 수 있습니다.
항목을 활성화하려면 다음과 같이 항목의 .enable() 함수를 사용하십시오.
from tray_manager import CheckBox
def checked_callback ():
print ( "Checked" )
def unchecked_callback ():
print ( "Unchecked" )
my_checkbox = CheckBox ( "My CheckBox" , checked_callback = checked_callback , unchecked_callback = unchecked_callback )
my_checkbox . enable () 항목을 비활성화하려면 다음과 같이 항목의 .disable() 함수를 사용하십시오.
from tray_manager import CheckBox
def checked_callback ():
print ( "Checked" )
def unchecked_callback ():
print ( "Unchecked" )
my_checkbox = CheckBox ( "My CheckBox" , checked_callback = checked_callback , unchecked_callback = unchecked_callback )
my_checkbox . disable () 항목을 메뉴 / 하위 메뉴의 기본 항목으로 만들고 대담한 모양을 제공하려면 항목을 True 로 작성 / 편집 할 때 default 속성을 설정할 수 있습니다.
메모
메뉴 / 하위 메뉴별로 1 개의 기본 항목 만 가질 수 있습니다. 기본적으로 기본 항목이 없습니다.
항목의 default 속성을 설정하려면 다음과 같이 수행하십시오.
항목을 만들 때 :
from tray_manager import Label
my_label = Label ( "My Label" , default = True )항목 편집 할 때 :
from tray_manager import Label
my_label = Label ( "My Label" )
my_label . edit ( default = True ) 일반 확인란 Crossmark를 새롭게 살펴 보려면 확인란을 작성 / 편집 할 때 Checkbox의 use_radio_look 속성을 True 로 설정할 수 있습니다.
항목의 use_radio_look 속성을 설정하려면 다음과 같이 수행하십시오.
항목을 만들 때 :
from tray_manager import CheckBox
def checked_callback ():
print ( "Checked" )
def unchecked_callback ():
print ( "Unchecked" )
my_checkbox = CheckBox ( "My CheckBox" , checked_callback = checked_callback , unchecked_callback = unchecked_callback , use_radio_look = True )항목 편집 할 때 :
from tray_manager import CheckBox
def checked_callback ():
print ( "Checked" )
def unchecked_callback ():
print ( "Unchecked" )
my_checkbox = CheckBox ( "My CheckBox" , checked_callback = checked_callback , unchecked_callback = unchecked_callback )
my_checkbox . edit ( use_radio_look = True ) tray_manager package 의 기능을 사용하기 전에 OS와 호환되는지 확인 해야합니다 . 이렇게하려면 tray_manager.Os_Support 객체를 사용하십시오. 사용하기 전에 확인해야 할 4 가지 차이 기능이 있습니다.
OS가 기능을 지원하는지 아는 것은 해당 Os_Support 변수가 참 이루어야합니다.
예를 들어 OS가 메뉴를 지원하는지 확인하려면 다음과 같이 수행하십시오.
from tray_manager import Os_Support
if Os_Support . SUPPORT_MENU :
print ( "The menu is supported by your OS" )
else :
print ( "The menu isn't supported by your OS" )메모
다음은 각 OS 및 백엔드에서 지원 되지 않는 기능의 차트입니다.
| 기능 OS 및 백엔드 | Windows (Win32) | 리눅스 (GTK) | Linux (Appindicator) | Linux (Ayatana-Appindicator) | 리눅스 (Xorg) | 마코스 (다윈) |
|---|---|---|---|---|---|---|
| 메뉴 | 지원 | 지원 | 지원 | 지원 | 지원되지 않습니다 | 지원 |
| 기본 | 지원 | 지원 | 지원되지 않습니다 | 지원되지 않습니다 | 지원 | 지원되지 않습니다 |
| 라디오 | 지원 | 지원 | 지원 | 지원 | 지원 | 지원되지 않습니다 |
| 공고 | 현재는 불가능합니다 | 알려지지 않은 | u 알 | 알려지지 않은 | 지원되지 않습니다 | 지원되지 않습니다 |
사용자 화면에서 알림을 작성하려면 tray_manager.TrayManager.notification 객체를 사용할 수 있습니다.
알림을 만들려면 tray_manager.TrayManager.notification 객체의 .notify() 함수를 사용하십시오.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_separate_thread = True )
notification = my_tray . notification
notification . notify ( "My App" , "Hello World !" ) 다음과 같이 remove_after_s 로 .notify() 함수로 몇 초 안에 값을 전달하여 알림을 제거한 후 지연을 지정할 수 있습니다.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_separate_thread = True )
notification = my_tray . notification
notification . notify ( "My App" , "Hello World !" , remove_after_s = 10 )
# The notification will close by itself after 10 seconds .remove_notification() 함수를 사용하여 다음과 같이 알림을 수동으로 제거 할 수 있습니다.
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_separate_thread = True )
notification = my_tray . notification
notification . notify ( "My App" , " Hello World !)
# Some code here
notification . remove_notification ()주의
기본적으로 알림 자체는 결코 닫히지 않을 것입니다. 새 제품을 만들기 전에 닫으십시오.
특정 기능이 필요한 경우 tray_manager.TrayManager 객체의 backend 인수를 tray_manager.Backends 값 중 하나로 설정할 수 있습니다.
메모
기본적으로 PyStray는 OS에서 가장 좋은 백엔드를 사용합니다.
주의
tray_manager.Backends 클래스의 백엔드를 사용해야 합니다 . 클래스의 객체 중 하나의 값을 전달하면 오류가 발생합니다.
또한 OS와 호환되는 백엔드를 사용해야 합니다 .
| OS | 백엔드 |
|---|---|
| 창 | win32 |
| 마코스 | darwin |
| 리눅스 | gtk , appindicator , ayatana-appindicator , xorg |