tray_manager عبارة عن حزمة تستخدم لإنشاء أيقونة علبة نظام ، استنادًا إلى Pystray (https://github.com/moses-palmer/pystray بواسطة Moses Palmér) ، هذه الحزمة هي نسخة "أسهل" من Pystray للمعالجة كما هي بناءً على استخدام الأشياء.
tray_manager هو publishd على pypi (https://pypi.org/project/tray-manager/) ويمكن تنزيله باستخدام الأمر التالي في المحطة الخاصة بك:
pip install tray-managerملحوظة
تحتاج إلى تثبيت Python على جهاز الكمبيوتر الخاص بك
الكائن الرئيسي للمكتبة هو كائن 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 ]مهم
ستصبح الكائنات القائمة والترايماناجر التي قتلتها عديمة الفائدة
تحذير
سيتم إنشاء كائن tray_manager.TrayManager تشغيل حلقة داخلية بمجرد إنشائها. هذا يعني أن إنشاء كائن tray_manager.TrayManager سيمنع بقية الكود الخاص بك. لمنع حدوث ذلك ، لديك خياران:
يمكنك تحديد وظيفة كوسيطة setup لكائن tray_manager.TrayManager ، وستبدأ هذه الوظيفة في مؤشر ترابط جديد عند إنشاء كائنك.
(Windows فقط) إذا كنت على Windows ولا تقلق بشأن التوافق مع منصات أخرى ، فيمكنك تعيين وسيطة run_in_separate_thread الخاصة بكائن tray_manager.TrayManager إلى True ، وسيبدأ ذلك في حلقة tray_manager في مؤشر ترابط جديد وسيتم تنفيذ بقية التعليمات البرمجية الخاصة بك بشكل صحيح في الشاشة الرئيسية.
العناصر هي عناصر تطبيقك ، وسيتم عرضها في القائمة التي تمت إضافتها إليها. هم أنواع مختلفة من العناصر التي تعمل جميعها بطريقة مماثلة ولكن لكل منها بعض الخصائص.
فيما يلي قائمة جميع العناصر:
الملصق هو العنصر الأساسي ، وهو مؤسس فقط من نص.
لإنشاء واحدة ، استخدم فئة tray_manager.Label كما يتبع:
from tray_manager import Label
my_label = Label ( "My Label" )يشبه الزر عنصر التسمية ولكن يمكنك إضافة وسيطة رد اتصال (وظيفة punctionType) والتي سيتم استدعاؤها عندما ينقر المستخدم على الزر. يمكنك أيضًا تحديد بعض الوسائط باعتبارها tuple التي سيتم تمريرها إلى وظيفتك عند النقر فوق الزر.
لإنشاء واحدة ، استخدم 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 ووسيطات مختلفة لكل منهما ، وواحدة عندما يتم تحويل مربع الاختيار من "المعوقين" إلى حالة "ممكّن" (لم يتم التحقق منه) ، وواحدة عند تحولها من "التمكين" إلى حالة "معطل" (تم التحقق من عدم التحقق).
يمكنك "تعطيل" التفاعلات مع خانة الاختيار الخاصة بك عن طريق تعيين قيمة 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 -> 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 ككائن tray_manager.TrayManager.menu ولا يمكن إزالته.
تحذير
تحقق من tray_manager.OsSupport.HAS_MENU للحصول على الاستخلاص على نظام التشغيل الخاص بك ، إذا لم يدعم نظام التشغيل الخاص بك القائمة ، فلن يكون كائن tray_manager.TrayManager.menu .
لاستخدام القائمة ، acces tray_manager.TrayManager.menu كائن على النحو التالي:
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() ، ثم قم بتعيين الرمز على أنه رمز جديد باستخدام وظيفة .set_icon() لكائن tray_manager.TrayManager .
ملحوظة
بشكل افتراضي ، الرمز هو مربع أبيض يبلغ 32 × 32 بكسل. يتم تحميل الرمز الافتراضي دائمًا في الذاكرة ويمكن تعيينه مرة أخرى عن طريق تمرير tray_manager.Values.DEFAULT كوسيطة name وظيفة .set_icon() .
لتحميل أيقونة ، استخدم دالة .load_icon() وتمريرها مسار ملف أو صورة مشفرة أو كائن PIL.Image أو أي ملف يمكن قراءته وتفسيره كصورة بواسطة PIL . تحتاج أيضًا إلى تمرير اسم سيتم استخدامه كمفتاح في DictionNary الرموز لإعادة إعادة أيقونة.
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 عندما تريد أن تتوقف عن عرضه في صينية النظام وإنشاء واحدة جديدة بمجرد أن تحتاجها مرة أخرى ، يمكنك استخدام وظائف .show() و .hide() كائن tray_manager.TrayManager للسيطرة على ما إذا كان التطبيق واضحًا في النظام أو لا.
ملحوظة
يمكنك تعيين وسيطة default_show لكائن tray_manager.TrayManager إلى True أو False عند إنشاء كائن tray_manager.TrayManager لتحديد ما إذا كان سيتم عرض أيقونة علبة النظام أو عدم إنشاء الكائن.
لإظهار التطبيق في علبة النظام ، استخدم وظيفة .show() لكائن tray_manager.TrayManager على النحو التالي:
from tray_manager import TrayManager
my_tray = TrayManager ( "My App" , run_in_seperate_thread = True )
my_tray . show () لإخفاء التطبيق في علبة النظام ، استخدم وظيفة .hide() لكائن tray_manager.TrayManager على النحو التالي:
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 () لجعل العنصر الخاص بك العنصر الافتراضي للقائمة / القائمة الفرعية وإعطائه نظرة جريئة ، يمكنك تعيين النسب default عند إنشاء / تحرير العنصر إلى True .
ملحوظة
يمكنك فقط الحصول على عنصر افتراضي واحد عن طريق القائمة / القائمة الفرعية. بشكل افتراضي ، لا يوجد عنصر افتراضي.
لتعيين النسب 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 مربع الاختيار العادي ، فيمكنك تعيين 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 ، يجب عليك التحقق مما إذا كانت متوافقة مع نظام التشغيل الخاص بك. للقيام بذلك ، استخدم كائن tray_manager.Os_Support . هناك 4 ميزات مختلفة تحتاج إلى التحقق منها قبل استخدام:
لمعرفة ما إذا كان نظام التشغيل الخاص بك يدعم ميزة ، يجب أن يكون متغير Os_Support المقابل صحيحًا.
على سبيل المثال ، للتحقق مما إذا كان نظام التشغيل الخاص بك يدعم القائمة ، قم بما يلي:
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 والخلفية | Windows (Win32) | Linux (GTK) | Linux (AppIndicator) | Linux (Ayatana-Appindicator) | Linux (xorg) | ماكوس (داروين) |
|---|---|---|---|---|---|---|
| قائمة طعام | مدعوم | مدعوم | مدعوم | مدعوم | غير مدعوم | مدعوم |
| تقصير | مدعوم | مدعوم | غير مدعوم | غير مدعوم | مدعوم | غير مدعوم |
| راديو | مدعوم | مدعوم | مدعوم | مدعوم | مدعوم | غير مدعوم |
| إشعار | حاليا unavailbe | مجهول | uknown | مجهول | غير مدعوم | غير مدعوم |
إذا كنت ترغب في إنشاء إشعار على شاشة المستخدم ، فيمكنك استخدام كائن tray_manager.TrayManager.notification .
لإنشاء إشعار ، استخدم دالة .notify() من tray_manager.TrayManager.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 !" ) يمكنك تحديد تأخير يتم بعد ذلك إزالة الإشعار عن طريق تمرير قيمة في ثوانٍ إلى وظيفة .notify() مثل remove_after_s على النحو التالي:
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 ()حذر
بشكل افتراضي ، لن يغلق الإخطار بنفسه أبدًا ، تأكد من إغلاقه قبل إنشاء إجازة جديدة.
إذا كنت بحاجة إلى ميزات محددة ، فيمكنك تعيين وسيطة backend لكائن tray_manager.TrayManager على إحدى قيم tray_manager.Backends .
ملحوظة
بشكل افتراضي ، ستستخدم Pystray أفضل الواجهة الخلفية على نظام التشغيل الخاص بك.
حذر
يجب عليك استخدام الواجهة الخلفية من فئة tray_manager.Backends ، مما يمر قيمة أحد كائن الفئة سوف يرفع خطأ.
يجب عليك أيضًا استخدام الواجهة الخلفية المتوافقة مع نظام التشغيل.
| نظام التشغيل | الخلفية |
|---|---|
| النوافذ | win32 |
| ماكوس | darwin |
| Linux | gtk ، appindicator ، ayatana-appindicator ، xorg |