एक स्थिति आइकन कैसे प्रोग्राम करें जो उबंटू के साथ-साथ अन्य वितरणों में भी प्रदर्शित होगा?


23

प्रश्न में आवेदन कुछ कार्रवाई करता है (यहां ऑडियो को नेटवर्क धाराओं से जोड़ता है) और इन कार्यों के सफल होने पर कम से कम चलता है। इसलिए कनेक्शन की स्थिति प्रदर्शित करने के लिए एक स्थिति आइकन की आवश्यकता होती है (जैसे कनेक्टेड / डिस्कनेक्टेड)। आइकन पर क्लिक करने के बाद ही एप्लिकेशन विंडो आगे के विकल्पों तक पहुंच प्रदान करेगी।

पायथन 2.6 और pyGtk का उपयोग करके मैंने आसानी से gtk_status_icon का उपयोग करके इसे महसूस किया । मैंने जानबूझकर विभिन्न उबंटू संस्करणों सहित संभव के रूप में कई वितरणों पर चलने के लिए आवेदन लिखा है। उपयोगकर्ता द्वारा उन्हें स्थापित करने के बाद ही संभव निर्भरता का उपयोग करने के लिए मैंने ध्यान रखा।

हालाँकि अब मैं सुनता हूँ कि gtk_status_icon अब भविष्य के उबंटू रिलीज़ में समर्थित नहीं होगी। डेवलपर्स को इसके बजाय एप्लिकेशन संकेतक का उपयोग करने के लिए कहा जाता है। फिर यह सुनिश्चित करने के लिए सबसे अच्छा अभ्यास क्या है:

  1. एप्लिकेशन के स्थानीय आइकन ठीक से प्रदर्शित होते हैं
  2. एप्लिकेशन अभी भी चलेगा और इसे भविष्य के उबंटू रिलीज में आइकन प्रदर्शित करेगा।
  3. आवेदन होगा भी चलाने के लिए और अन्य वातावरण जहां में यह आइकन प्रदर्शित सूचक-एप्लेट , libappindicator , और अजगर-appindicator नहीं दिया जाता है।

यदि संकेतक-एप्लेट नहीं चल रहा है, तो gtk_status_icon के लिए संकेतक कमबैक तंत्र काम नहीं करेगा । पायथन दुभाषिए नहीं चलेंगे अगर आयात करने के लिए एपिंडिलेटर मॉड्यूल नहीं था । क्या मुझे अलग-अलग वितरणों के लिए अलग-अलग संस्करण विकसित करने की आवश्यकता है या क्या इसके आसपास आने का एक बेहतर तरीका है।

मुझे उबंटू विकी में दिए गए उदाहरण के अलावा ApplicationIndicator का उपयोग करने के तरीके के बारे में एक दस्तावेज मिल गया है ? यदि उबंटू बनाम गैर-उबंटू वितरण के लिए अलग-अलग स्रोत कोड प्रोग्रामिंग करने से बचने के लिए संकेतक-एपलेट चल रहा है, तो यह जांचने के लिए क्या आदेश दिए गए हैं?

जवाबों:


16

मुझे लगता है कि यहां की जरूरत वास्तव में अजगर-एपिंडिसिटर लाइब्रेरी का अधिक निर्धारण है। यदि यह मौजूद है, तो यह उन सभी कमबैक मामलों का समर्थन करेगा जिनकी आपको आवश्यकता है। यह XFCE, KDE और पुराने GNOME को उचित रूप से संभालेगा। इस जवाब में इसे कैसे करें, इसका अच्छा उदाहरण

एप्लिकेशन संकेतक रेंडरिंग प्रक्रिया उपलब्ध है या नहीं, इसके लिए एपिंडिसिटर लाइब्रेरी DBus का उपयोग करेगा। यह एकता पर मामला होगा, या यदि संकेतक-एपलेट चल रहा है। यदि यह उपलब्ध है तो यह उसी मेनू के साथ GtkStatusIcon का उपयोग करने के लिए वापस आ जाएगा, यदि वह इसका उपयोग नहीं करेगा।

दुर्भाग्य से, मेरा मानना ​​है कि यदि आप लाइब्रेरी उपलब्ध नहीं होने के मामले को संभालना चाहते हैं तो आपको दोनों कोड पथ रखने होंगे। हालाँकि, हमें अन्य डिस्ट्रो में पुस्तकालय प्राप्त करने में मदद करने में खुशी होगी :)


इस बहुत स्पष्ट उत्तर के लिए धन्यवाद। अगर मुझे अपना ऐप 11.04 में चल रहा है तो मुझे उस रास्ते की ओर इशारा करना होगा, जहां मुझे जाना है। मेरे पास GtkStatusIcon के लिए एक काम करने का रास्ता है, लेकिन संकेतक-एप्लेट के लिए पूरी चीज़ को फिर से विकसित करने की आवश्यकता होगी। अगर मैंने आपकी टिप्पणी को बग # 668375 पर समझ लिया है, तो क्या मैं संभवतः अपने स्थानीय आइकन का उपयोग बिना पूरे आइकन थीम के कर सकता हूं, क्या मैं कर सकता हूं?

AppIndicator प्रोग्रामिंग में गोता लगाने का समय होने के बाद, मैंने पाया कि एपिंडिसिटर मॉड्यूल की जाँच करने के लिए jgoguen के सुझाव का उपयोग करने से वास्तव में मदद नहीं मिलती है, क्योंकि कस्टम आइकॉन 10.04 LTS में रेंडर नहीं करेगा। मेरी टिप्पणियों को बग # 668375 पर देखें।
तक्षक

मेरे जवाब में इस समस्या को हल करने का एक बहुत आसान तरीका शामिल है। यह मेरे ऐप के लिए बहुत अच्छी तरह से काम कर रहा है और यहां तक ​​कि एक ऐप को पोर्ट करने के लिए इसे दर्द रहित बना दिया है जो विंडोज के लिए ऐपइंडिकेटर्स का उपयोग करता है!
नाथन उस्मान

10

मेरे पास एक उत्कृष्ट समाधान है जो स्टैकऐपलेट में अच्छी तरह से काम किया है - मैंने appindicatorमॉड्यूल का एक कार्यात्मक-समतुल्य संस्करण बनाया है gtk.StatusIconजो वास्तविक मॉड्यूल मौजूद नहीं होने पर समान कार्यक्षमता प्रदान करने के लिए आंतरिक रूप से उपयोग करता है।

इसका उपयोग करना उतना ही सरल है:

  1. निम्न फ़ाइल को डाउनलोड करके कॉल करेंappindicator_replacement.py
  2. अपने आवेदन में निम्नलिखित जोड़ना:

    try:
        import appindicator
    except ImportError:
        import appindicator_replacement as appindicator

बस! अब आपका एप्लिकेशन AppIndicators के समर्थन के साथ या बिना पूरी तरह से चलेगा। यह विंडोज़ पर भी चलेगा, यह मानते हुए कि आपके पास कोई अन्य प्लेटफ़ॉर्म-विशिष्ट कोड नहीं है।


नोट: फ़ाइल एमआईटी लाइसेंस के तहत जारी की गई है - इसलिए आप इसे किसी भी चीज़ के लिए बहुत अधिक उपयोग कर सकते हैं।


9

आपको दोनों के लिए कोड लिखना होगा। आप अपने पायथन कोड में एपिंडिलेटर की मौजूदगी का पता लगा सकते हैं:

have_appindicator = True
try:
    import appindicator
except:
    have_appindicator = False

वहां से, यह तय करने के लिए has_appindicator का उपयोग करें कि क्या आपको appindicator कोड या gtk_status_icon कोड का उपयोग करना चाहिए।

दुर्भाग्य से, इसका मतलब यह भी है कि आपको परीक्षण करने के लिए उबंटू और एक अन्य वातावरण दोनों की आवश्यकता होगी।


1
फिर भी, ऐसे वातावरण हो सकते हैं जहां पायथन-एपिंडिसाइटर स्थापित है लेकिन संकेतक एप्लेट नहीं चल रहा है। एप्लिकेशन को भी इसे संभालने की आवश्यकता होगी।
ताककत

उस स्थिति के लिए wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators > कस्टम फ़ॉलबैक देखें। यदि कोई संकेतक एप्लेट मौजूद नहीं है, तो डिफ़ॉल्ट रूप से, आपको एप्लिकेशन संकेतक के लिए एक gtk.StatusIcon मिलेगा।
htorque

मुझे कमबैक विकल्प के बारे में पता है। जो मुझे समझ में नहीं आ रहा है, अगर संकेतक-एपलेट नहीं चल रहा है तो संकेतक-एपलेट कैसे कमबैक प्रदान कर सकता है?
15

मैं कल्पना करता हूं कि यह केवल संकेतक-एप्लेट की जांच करता है और पर्दे के पीछे gtk_status_icon कार्यक्षमता प्रदान करता है।
jgoguen

1
@ जोगोगुएन: "यह" क्या है? मैं समझता हूं कि 11.04 से उबंटू / एकता gtk_status_icon का समर्थन नहीं करेगा । अन्य वितरणों में "यह" नहीं हो सकता है। मैं वास्तव में इस बारे में चिंतित हूं।
तक्कत

3
for line in os.popen("ps xa"): 
fields = line.split() 
pid = fields[0] 
process = fields[4]

applet_is_running = ( process.find('indicator-applet') > 0 )

इस तरह से आप पता लगा सकते हैं कि संकेतक एप्लेट चल रहा है या नहीं। आपको Ubuntu 11.04 के बारे में चिंता करने की आवश्यकता नहीं है क्योंकि यह मामला नहीं होगा। कोई फ़ॉलबैक परिदृश्य नहीं है क्योंकि सूचक-एपलेट एक अनिवार्य घटक है, डिफ़ॉल्ट रूप से चल रहा है।


संकेतक-एप्लेट की पीआईडी ​​प्राप्त करने के लिए अपने संकेत के लिए धन्यवाद (मैं पहले से ही पिडोफ का उपयोग करके अन्य संभावित निर्भरता के लिए ऐसा करता हूं), यह एक बेहतर रूप से कम सुरुचिपूर्ण तरीका होगा यदि बेहतर कुछ भी उपलब्ध नहीं था। जहां तक ​​मैं देख सकता हूं कि सूचक-एपलेट केवल हार्डवेयर आवश्यकताओं को पूरा करने पर ही एकता के साथ चल रहा है। उपयोगकर्ता 2D गनोम में बूट करने में सक्षम होंगे और संकेतक-एप्लेट नहीं चलाने का निर्णय ले सकते हैं। हालाँकि यह तब मेरी समस्या नहीं है।
Takkat

मैं आपसे सहमत हूं कि यह 'सुरुचिपूर्ण' नहीं हो सकता है (लेकिन आप अपनी इच्छा के अनुसार सभी कॉस्मेटिक जोड़ सकते हैं: डी) हालांकि यह काम करना चाहिए। व्यक्तिगत रूप से मैं उन समाधानों को पसंद करता हूं जो अच्छी तरह से काम करता है और लालित्य दूसरे नंबर पर आता है :)
ओपननिंगिया

यह कार्य मेरे 14.04 सिस्टम पर नहीं चल रहा है। क्या दृष्टिकोण को समाप्त कर दिया गया है? /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-serviceइसके बजाय बहुत सारे कार्य हैं।
रोकें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.