मैं अपने एप्लिकेशन के साथ लॉन्चर प्रगति बार को कैसे काम करूं?


10

पृष्ठभूमि शोध

मैं एक सरल python/Gtkअनुप्रयोग के लिए एकता लांचर के भीतर प्रगति बार को अपडेट करने का प्रयास कर रहा हूं Quicklyजिसे कॉल किया गया है test; हालाँकि, इस वीडियो में दिए गए निर्देशों का पालन करते हुए , मैं Unityलॉन्चर में प्रगति बार को सफलतापूर्वक अपडेट नहीं कर पाया । यूनिटी इंटीग्रेशन वीडियो में, Quicklyउपयोग नहीं किया गया था, इसलिए जिस तरह से एप्लिकेशन संरचित किया गया था, वह थोड़ा अलग था, और वीडियो में प्रयुक्त कोड डिफ़ॉल्ट Quickly ubuntu-applicationटेम्पलेट एप्लिकेशन में संशोधन के बिना ठीक से काम नहीं करता है ।


स्क्रीनशॉट

यहाँ एप्लिकेशन आइकन का एक स्क्रीनशॉट है क्योंकि यह वर्तमान में एकता लॉन्चर में प्रदर्शित किया गया है।

एक दर्शनीय प्रगति पट्टी के बिना धुंधला अनुप्रयोग चिह्न

यहाँ एकता लांचर प्रगति बार कार्यक्षमता का एक स्क्रीनशॉट है जो मुझे पसंद आएगा (मेल आइकन पर ओवरलेड : wiki.ubuntu.com )।

एकता लांचर प्रगति बार कार्यक्षमता


परियोजना क्रमांक

एक .zipपरियोजना फ़ाइलों से युक्त फ़ाइल पाया जा सकता है यहाँ


अपेक्षित् व्यवहार

मैं उपरोक्त कोड को एक प्रगति पट्टी दिखाने की उम्मीद करूंगा जो एकता लांचर में परीक्षण अनुप्रयोग के लिए आइकन पर 75% पूर्ण ओवरले है , लेकिन एप्लिकेशन केवल तभी चलता है और जब कमांड quickly runनिष्पादित होता है तो कोई प्रगति पट्टी प्रदर्शित नहीं करता है।


समस्या की जांच

मेरा मानना ​​है कि समस्या यह है कि मुझे एप्लिकेशन की मुख्य विंडो का संदर्भ ठीक से नहीं मिल रहा है, हालांकि, मुझे यकीन नहीं है कि इस समस्या को ठीक से कैसे ठीक किया जाए। मैं यह भी मानता हूं कि लाइन: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")जटिलता का एक और स्रोत हो सकता है क्योंकि साधारण फ़ाइलों के बजाय फाइलें Quicklyबनाता है , इसलिए मुझे यकीन नहीं है कि अगर यह समस्या भी पैदा कर सकता है।.desktop.in.desktop

शायद, इस मुद्दे का एक अन्य स्रोत यह है कि मैं पूरी तरह से .desktopऔर .desktop.inफ़ाइलों के बीच के अंतर को नहीं समझता हूं । क्या यह संभवतः test.desktop.inफ़ाइल की एक प्रतिलिपि बनाने और इसे नाम बदलने के लिए समझ में आता है test.desktop, और सही फ़ाइल को संदर्भित /usr/share/applicationsकरने के लिए इसे जगह देता है ?get_for_desktop_id("test,desktop").desktop


संबंधित अनुसंधान लिंक

हालाँकि, मैं अभी भी .desktop और .desktop.in फ़ाइलों के बीच के अंतर पर स्पष्ट नहीं हूं, मैंने .desktop फ़ाइलों पर कुछ शोध किया है और मैं कुछ लिंक पर आया हूं:


संपादित करें

चलने python setup.py buildऔर फिर /build/share/applicationsनिर्मित test.desktopफ़ाइल को नेविगेट करने और स्थानांतरित करने के लिए ~/.local/share/applications, और अंत में निष्पादित करने के बाद quickly run, केवल एक आइकन के लिए एक प्रश्न चिह्न प्रदर्शित किया जा रहा है, जिसमें कोई दृश्य प्रगति पट्टी नहीं है

प्रदर्शित किए गए एप्लिकेशन आइकन के लिए प्रश्न चिह्न


संपादित करें २

निर्मित .desktopफ़ाइल की आगे की जांच के बाद , यह पता चला कि लाइन: फ़ाइल के Icon=/usr/share/test/media/test.svgभीतर .desktopएक आइकन फ़ाइल की ओर इशारा किया गया था, test.svgजिसका नाम मौजूद नहीं था।

आदेश में इस समस्या को हल करने के लिए, मैं नामक एक नया फ़ोल्डर बनाया testमें /usr/share/आदेश का उपयोग sudo mkdir testकरें और फिर परीक्षण फ़ोल्डर बुलाया का एक और फ़ोल्डर के अंदर बनाया mediaआदेश का उपयोग sudo mkdir mediaकरें, और तब मैं चले गए test.svgआइकन पर मेरी जल्दी परियोजना निर्देशिका में स्थित फ़ाइल test/data/media/test.svgको /usr/share/test/media/.svgआवेदन के लिए आइकन अब एकता लॉन्चर बार में ठीक से प्रदर्शित करता है और ऑल्ट-टैब ध्यान में रखते हुए, हालांकि वहां अभी भी नहीं दिखाई प्रगति बार है के रूप में नीचे स्क्रीनशॉट में दिखाया गया।

केवल एप्लिकेशन आइकन प्रदर्शित किया गया


संपादित करें 3

जैसा कि @dobey ने बताया, लाइन में TestWindow.py फ़ाइल के कोड में एक टाइपो था:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop"),

कहाँ test.destkop, होना चाहिए test.desktop

मैंने इस टाइपो को बदल दिया और अनुप्रयोग का उपयोग करके निष्पादित किए जाने पर कोई दृश्यमान परिवर्तन नहीं हुआ quickly run। हालांकि, लाइन को जोड़ने के बाद print('Integrating with launcher')करने के लिए add_launcher_integration()वहाँ टर्मिनल जब आवेदन चलाया गया था में कोई इसी उत्पादन किया गया था, यह दर्शाता है कि समस्या हो कि लगता है add_launcher_integration()आवेदन शुरू होता है सही ढंग से जब कहा जा करने के लिए नहीं प्रतीत होता है।


संपादित करें ४

आगे की जांच के बाद, यह पता चला कि add_launcher_integration()वास्तव में कहा जाता है जब आवेदन शुरू होता है। लाइन के अलावा के साथ:

os.system("clear")

लाइन से पहले

print("Integrating with launcher")

संदेश "लांचर के साथ एकीकरण" अब में प्रदर्शित करता है terminal

हालांकि, यूनिटी लॉन्चर बार में अभी भी कोई प्रगति नहीं है


संपादित करें ५

पुनर्निर्माण के बाद Quicklyक्रियान्वित करते हुए परियोजना python setup.py buildऔर निर्मित चलती .desktopभीतर फ़ाइल Quicklyमें स्थित परियोजना /build/share/applications/के लिए ~/.local/share/applications, आवेदन आइकन और प्रगति बार अब ठीक से प्रदर्शित एकता लॉन्चर बार में। लांचर एकीकरण का एक स्क्रीनशॉट नीचे देखा जा सकता है।

एप्लिकेशन आइकन और प्रगति बार प्रदर्शित होता है

जवाबों:


8

.Desktop फ़ाइल को उस स्थान पर स्थापित करना होता है जहाँ bamfलाइब्रेरी इसके बारे में जानती है।

आपको अंतर्निहित .desktop फ़ाइल (जो .desktop.in से बनाई जानी चाहिए), को अपने ~/.local/share/applicationsफ़ोल्डर में कॉपी करके परीक्षण करने में सक्षम होना चाहिए , और चल रहा है update-desktop-database ~/.local/share/applications, हालांकि इस आदेश को चलाने की आवश्यकता नहीं हो सकती है यदि आपका एप्लिकेशन किसी भी MIME प्रकार को संभाल नहीं करता है ।

.Desktop और .desktop.in के बीच अंतर यह है कि .desktop.in का अनुवाद होने के लिए सेट किया गया है, और निर्माण के दौरान intltool द्वारा संसाधित किया जाता है, अनुवाद डाला जाता है, .desktop.in से .desktop फ़ाइल बनाते हैं। फ़ाइल।

इसके अलावा, मैंने आपके कोड में एक टाइपो देखा:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")

"डेस्कॉप" बनाम "डेस्कटॉप" पर ध्यान दें कि यह होना चाहिए। शायद यह है, अगर यह फिर से टाइपिंग त्रुटि नहीं है। यह मानते हुए कि आपका कोड वास्तव में चलाया जा रहा है, यह एक समस्या है। अगर यह नहीं चलता है, तो यह समस्या है। आप print('Integrating with launcher')add_launcher_integration फ़ंक्शन को देखने के लिए एक जोड़ सकते हैं। इसे चलाने पर टर्मिनल पर दिखाई देना चाहिए।


अंतर्निहित .desktop फ़ाइल कब बनाई जाती है? क्या इसका निर्माण तब किया जाता है जब इसे जल्दी से चलाया जाता है, और यह कहाँ स्थित है?
केविन गुरनी 14

मैं जल्दी से उपयोग नहीं करता हूं, और यह नहीं जानता कि वास्तव में यह इसे कब बनाएगा, लेकिन सामान्य तौर पर एक मानक पायथन लाइब्रेरी / एप्लिकेशन के साथ, DistUtilsExtra के साथ setup.py का उपयोग करते हुए, यह "./setup.py build" या चलने पर होगा। setup.py कमांड जो निर्माण भी चलाता है।
dobey

मैं क्रमिक रूप से python setup.py बिल्ड को चलाने में कामयाब रहा। तो, अब मैं बस test.desktop फ़ाइल को ~ / .local / शेयर / एप्लिकेशन में स्थानांतरित करता हूं और प्रगति बार को केवल तभी प्रदर्शित किया जाना चाहिए जब मैं जल्दी से चलाता हूं?
केविन गुरनी

मैंने अजगर परियोजना का निर्माण किया और फिर निर्मित .desktop फ़ाइल को ~ / usr / शेयर / अनुप्रयोगों में स्थानांतरित कर दिया और फिर अपडेट किया गया डेस्कटॉप-डेटाबेस ~ / .local / साझा / आपके द्वारा सुझाए गए एप्लिकेशन, लेकिन अब मुझे केवल एक प्रश्न मिल रहा है। यहाँ दिखाया गया है एक आवेदन आइकन के लिए: i.stack.imgur.com/RWYud.png
केविन गुरनी

Test.desktop फ़ाइल में चिह्न = रेखा क्या कहती है?
dobey
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.