tray_manager adalah paket yang digunakan untuk membuat ikon baki sistem, berdasarkan pystray (https://github.com/moses-palmer/pystray oleh Moses Palmér), paket ini adalah versi "lebih mudah" dari Pystray untuk dimanipulasi karena didasarkan pada penggunaan objek.
tray_manager diterbitkan di PYPI (https://pypi.org/project/tray-manager/) dan dapat diunduh dengan menggunakan perintah berikut di terminal Anda:
pip install tray-managerCatatan
Anda perlu menginstal python di komputer Anda
Objek utama dari Libairy adalah objek tray_manager.TrayManager , itu adalah elemen pusat dan dapat dianggap sebagai ikon dalam baki sistem itu sendiri, berisi semua elemen aplikasi kami.
Untuk membuat satu, Anda perlu mengimpor kelas tray_manager.TrayManager dan membuat objek baki seperti yang diikuti:
from tray_manager import TrayManager
my_tray = TrayManager ( app_name = "My App" ) Untuk menghentikan aplikasi, Anda perlu menggunakan fungsi .kill() sebagai berikut:
Catatan
Fungsi .kill() mengembalikan semua item yang terkandung dalam menu sebagai daftar item
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 ]Penting
Objek Menu dan TrayManager yang Anda bunuh akan menjadi tidak berguna
Peringatan
Membuat objek tray_manager.TrayManager akan menjalankannya loop dalam segera setelah dibuat. Ini berarti bahwa membuat objek tray_manager.TrayManager akan memblokir sisa kode Anda. Untuk mencegah hal itu terjadi, Anda memiliki 2 opsi:
Anda dapat menentukan fungsi sebagai argumen setup dari objek tray_manager.TrayManager , fungsi ini akan dimulai di utas baru saat membuat objek Anda.
(Hanya Windows) Jika Anda berada di Windows dan Anda tidak khawatir tentang kompatibilitas dengan platform lain, Anda dapat mengatur argumen run_in_separate_thread dari tray_manager.TrayManager objek ke True , ini akan memulai loop tray_manager di utas baru dan sisa kode Anda akan dieksekusi dengan benar di loop utama.
Item adalah elemen aplikasi Anda, mereka akan ditampilkan di menu yang ditambahkan. Berbagai jenis item yang semuanya berfungsi dengan cara yang sama tetapi masing -masing memiliki beberapa kekhususan.
Berikut adalah daftar semua item:
Label adalah item paling dasar, hanya merupakan teks.
Untuk membuat satu, gunakan kelas tray_manager.Label sebagai berikut:
from tray_manager import Label
my_label = Label ( "My Label" )Tombol seperti item label tetapi Anda dapat menambahkan argumen panggilan balik (functionType) yang akan dipanggil ketika pengguna mengklik tombol. Anda juga dapat menentukan beberapa argumen sebagai tuple yang akan diteruskan ke fungsi Anda ketika tombol diklik.
Untuk membuat satu, gunakan kelas tray_manager.Button sebagai berikut:
from tray_manager import Button
def my_callback ( text : str ) -> None :
print ( text )
my_button = Button ( "My Button" , my_callback , args = ( "Hello" ,))Item kotak centang sedikit lebih kompleks daripada tombol biasa, ia memiliki 2 callback yang berbeda, bukan 1 dan argumen yang berbeda untuk masing -masing, satu untuk ketika kotak centang beralih dari status 'dinonaktifkan' ke 'diaktifkan' (tidak diperiksa ke status yang diperiksa), dan satu ketika beralih dari status 'diaktifkan' ke 'dinonaktifkan' (diperiksa tidak diperiksa).
Anda dapat 'menonaktifkan' interaksi dengan kotak centang Anda dengan mengatur nilai check_default ke None .
Catatan
Panggilan balik tidak akan dieksekusi jika pengguna mengklik kotak centang saat dinonaktifkan.
Untuk membuat satu, gunakan kelas tray_manager.CheckBox sebagai diikuti:
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" ,)) Untuk mendapatkan status kotak centang saat ini, Anda dapat menggunakan fungsi .get_status() sebagai berikut:
from tray_manager import CheckBox
my_checkbox = CheckBox ( "My CheckBox" )
my_checkbox . get_status ()
- > bool | None Anda juga dapat mengatur status kotak centang dengan menggunakan fungsi .set_status() sebagai berikut:
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 Catatan
| Kotak centang | Status |
|---|---|
| Diperiksa | True |
| Tidak terkendali | False |
| Dengan disabilitas | None |
Ketika kotak centang dinonaktifkan, tetap dalam keadaan sebelumnya dan berhenti berinteraksi, ini berarti bahwa jika kotak centang dicentang sebelum dinonaktifkan, kotak centang akan tetap dicentang tetapi tidak ada yang akan terjadi jika pengguna mengkliknya.
Pemisah adalah objek pystray bawaan, tidak memiliki parameter.
Untuk membuat satu, gunakan kelas tray_manager.Separator sebagai diikuti:
from tray_manager import Separator
my_separator = Separator () Subtremenu seperti objek tray_manager.Menu dan dapat berisi item lain termasuk submenu lainnya.
Peringatan
Bersikaplah menguatkan saat menambahkan submenu ke dalam satu sama lain karena menambahkan submenu ke submenu yang terkandung dalam submenu yang Anda tambahkan akan menghasilkan kesalahan tray_manager.CircularAddException .
Flowchart TD
A {submenu saya} -> b (label saya)
A -> C (tombol saya)
A -> d {submenu kedua saya}
D -> E (label kedua saya)
D -> f (kotak centang saya)
D -> | tray_manager.circularaddexception | A
Untuk membuat satu, gunakan tray_manager.Submenu sebagai berikut:
from tray_manager import Submenu
my_submenu = Submenu ( "My Submenu" ) Untuk menambahkan item ke submenu, gunakan fungsi .add() sebagai berikut:
from tray_manager import Submenu , Label
my_submenu = Submenu ( "My Submenu" )
my_label = Label ( "My Label" )
my_submenu . add ( my_label ) Untuk menghapus item dari submenu, gunakan fungsi .remove() sebagai berikut:
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 Catatan
Fungsi .remove() mengembalikan item yang dihapus
Untuk mendapatkan item yang terkandung dalam submenu, gunakan fungsi .get_items() sebagai berikut:
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 adalah salah satu elemen sentral dari perpustakaan ini, berfungsi seperti submenu dan dibuat secara otomatis ketika Anda membuat objek tray_manager.TrayManager sebagai objek tray_manager.TrayManager.menu dan tidak dapat dihapus.
Peringatan
Periksa tray_manager.OsSupport.HAS_MENU untuk disponibilitas pada OS Anda, jika OS Anda tidak mendukung menu, objek tray_manager.TrayManager.menu tidak akan ada.
Untuk menggunakan menu, mengakses objek tray_manager.TrayManager.menu sebagai diikuti:
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu Untuk menambahkan item ke menu, gunakan fungsi .add() sebagai berikut:
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 ) Untuk menghapus item dari menu, Anda dapat menggunakan fungsi .remove() sebagai berikut:
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 Catatan
Fungsi .remove() mengembalikan item yang telah dihapus.
Untuk mendapatkan item yang terkandung dalam menu, Anda dapat menggunakan fungsi .get_items() sebagai berikut:
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 ] Untuk memperbarui item menu (item yang terkandung di dalam menu), gunakan fungsi .update() .
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_menu = my_tray . menu
my_menu . update ()Catatan
Fungsi .update() dipicu secara otomatis setiap kali Anda mengedit, menambah atau menghapus item dari menu.
Anda dapat menyesuaikan objek TrayManager Anda dengan cara yang berbeda seperti:
Untuk mengatur nama baru untuk aplikasi Anda, gunakan fungsi .set_app_name() sebagai berikut:
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 Gunakan sistem memori untuk ikon, untuk mengatur ikon baru untuk aplikasi Anda, pertama -tama Anda harus memuatnya menggunakan fungsi .load_icon() , lalu atur ikon sebagai ikon baru menggunakan fungsi .set_icon() dari objek tray_manager.TrayManager .
Catatan
Secara default, ikon adalah kuadrat putih piksel 32x32. Ikon default selalu dimuat dalam memori dan dapat ditetapkan lagi dengan melewati tray_manager.Values.DEFAULT sebagai argumen name fungsi .set_icon() .
Untuk memuat ikon, gunakan fungsi .load_icon() dan lewati jalur file, gambar yang dikodekan, objek PIL.Image atau file apa pun yang dapat dibaca dan ditafsirkan sebagai gambar oleh PIL . Anda juga perlu meneruskan nama yang akan digunakan sebagai kunci dalam Icons Dictionnary untuk meraih ikon Anda.
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" )Peringatan
tray_manager menggunakan kamus untuk menyimpan ikon Anda yang dimuat, ini berarti memuat gambar menggunakan nama yang sudah digunakan akan menimpa gambar yang sebelumnya dimuat dengan nama itu. Satu -satunya pengecualian untuk ini adalah ikon default yang tidak dapat diedit.
Untuk mengatur ikon, gunakan fungsi .set_icon() dan berikan nama (kunci) ikon Anda yang Anda atur saat Anda memuat ikon.
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" ) Alih -alih membunuh objek tray_manager.TrayManager ketika Anda ingin berhenti ditampilkan di baki sistem dan membuat yang baru setelah Anda membutuhkannya lagi, Anda dapat menggunakan fungsi .show() dan .hide() dari tray_manager.TrayManager sistem atau tidak.
Catatan
Anda dapat mengatur argumen default_show dari objek tray_manager.TrayManager ke True atau False saat membuat objek tray_manager.TrayManager Anda untuk menentukan apakah ikon baki sistem akan ditampilkan atau tidak setelah objek dibuat.
Untuk menampilkan aplikasi di baki sistem, gunakan fungsi .show() dari objek tray_manager.TrayManager seperti yang diikuti:
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . show () Untuk menyembunyikan aplikasi di baki sistem, gunakan fungsi .hide() dari objek tray_manager.TrayManager seperti yang diikuti:
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . hide () Untuk mengedit item yang sudah dibuat, gunakan fungsi .edit() dari item tersebut, saat melakukannya, Anda hanya perlu menentukan argumen mana yang ingin Anda ubah, dan yang lain akan tetap sama seperti sebelumnya.
Untuk mengedit item, lakukan seperti yang diikuti:
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 !Anda dapat menyesuaikan item dengan berbagai cara seperti:
Jika Anda ingin menampilkan item tetapi Anda ingin itu tidak responsif (untuk tombol, kotak centang, dan submenu) dan terlihat seperti item yang dinonaktifkan, Anda dapat menggunakan fungsi .enable() dan .disable() dari item tersebut.
Catatan
Secara default, setiap item diaktifkan
Setiap item dapat dinonaktifkan kecuali pemisah.
Untuk mengaktifkan item Anda, gunakan fungsi .enable() dari item yang diikuti:
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 () Untuk menonaktifkan item Anda, gunakan fungsi .disable() dari item yang diikuti:
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 () Untuk menjadikan item Anda item default dari menu / submenu dan memberikan tampilan yang berani, Anda dapat mengatur atribut default saat membuat / mengedit item menjadi True .
Catatan
Anda hanya dapat memiliki 1 item default dengan menu / submenu. Secara default, tidak ada item default.
Untuk mengatur atribut default item, lakukan sesuai mengikuti:
Saat membuat item:
from tray_manager import Label
my_label = Label ( "My Label" , default = True )Saat mengedit item:
from tray_manager import Label
my_label = Label ( "My Label" )
my_label . edit ( default = True ) Jika Anda ingin memberikan tampilan baru ke centang kotak reguler Anda, Anda dapat mengatur atribut kotak centang use_radio_look ke True saat membuat / mengedit kotak centang.
Untuk mengatur atribut item use_radio_look , lakukan seperti yang diikuti:
Saat membuat item:
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 )Saat mengedit item:
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 ) Sebelum menggunakan fitur tray_manager package , Anda harus memeriksa apakah mereka kompatibel dengan OS Anda. Untuk melakukannya, gunakan objek tray_manager.Os_Support . Ada 4 fitur perbedaan yang perlu Anda periksa sebelum menggunakan:
Untuk mengetahui apakah OS Anda mendukung fitur, variabel Os_Support yang sesuai harus benar.
Contoh, untuk memeriksa apakah OS Anda mendukung menu, lakukan sesuai mengikuti:
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" )Catatan
Berikut adalah bagan fitur yang seharusnya dan tidak seharusnya didukung oleh setiap OS dan backends.
| Fitur os dan backend | Windows (Win32) | Linux (GTK) | Linux (AppIndicator) | Linux (Ayatana-Appindikator) | Linux (Xorg) | MacOS (Darwin) |
|---|---|---|---|---|---|---|
| Menu | Didukung | Didukung | Didukung | Didukung | Tidak didukung | Didukung |
| Bawaan | Didukung | Didukung | Tidak didukung | Tidak didukung | Didukung | Tidak didukung |
| Radio | Didukung | Didukung | Didukung | Didukung | Didukung | Tidak didukung |
| Pemberitahuan | Saat ini unavailbe | Tidak dikenal | Kamu diketahui | Tidak dikenal | Tidak didukung | Tidak didukung |
Jika Anda ingin membuat pemberitahuan di layar pengguna, Anda dapat menggunakan objek notification tray_manager.TrayManager.notification .
Untuk membuat pemberitahuan, gunakan fungsi .notify() dari objek notiffic tray_manager.TrayManager.notification sebagai diikuti:
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 !" ) Anda dapat menentukan keterlambatan setelah itu pemberitahuan akan dihapus dengan memberikan nilai dalam detik ke fungsi .notify() sebagai remove_after_s sebagai berikut:
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 Anda juga dapat menggunakan fungsi .remove_notification() untuk secara manual menghapus pemberitahuan sebagai berikut:
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 ()Peringatan
Secara default pemberitahuan tidak akan pernah ditutup dengan sendirinya, pastikan untuk menutupnya sebelum membuat yang baru.
Jika Anda memerlukan fitur tertentu, Anda dapat mengatur argumen backend dari objek tray_manager.TrayManager ke salah satu nilai tray_manager.Backends .
Catatan
Secara default, Pystray akan menggunakan backend terbaik yang dapat dilakukan pada OS Anda.
Peringatan
Anda harus menggunakan backend dari kelas tray_manager.Backends , memberikan nilai salah satu objek kelas akan menimbulkan kesalahan.
Anda juga harus menggunakan backend yang kompatibel dengan Anda OS.
| Os | Backend |
|---|---|
| Windows | win32 |
| MacOS | darwin |
| Linux | gtk , appindicator , ayatana-appindicator , xorg |