पायथन के साथ ऐप संकेतक में Gtk.Widgets का उपयोग करना


44

2010 में स्टेफानो पलाज़ो ने एक संबंधित सवाल पूछा, एक मनमाने ढंग से gtk.Widget को एक appindicator.Indicator में डालते हुए , और एक समान StackOverflow पर पूछा गया । दोनों ही मामलों में आम सहमति है कि उबंटू के ऐप संकेतक सीमित हैं। के रूप में माइकल Ekstrand डाल दिया:

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

हालांकि, यह 2016 में आज ब्लूटूथ संकेतक में हमें जो दिखता है, उसका खंडन करता है: यह टॉगल स्विच का उपयोग करता है।

यहाँ छवि विवरण दर्ज करें

उसी को उबुन्टु वन इंडिकेटर के साथ 13.04 से देखा जा सकता है:

यहाँ छवि विवरण दर्ज करें

तो जाहिर है एक रास्ता है। मैंने संकेतक-ब्लूटूथ स्रोत कोड का अध्ययन किया है, लेकिन यह वैल में लिखा है। मैं, हालांकि, मुख्य रूप से अजगर में काम करता हूं, और मेरे सभी पहले से मौजूद संकेतकों को फिर से लिखने के लिए वैला को सीखना थोड़ा बहुत काम है।

तो सवाल का मूल: कोई कैसे Gtk.Widgets का उपयोग कर सकता है, या बहुत कम टॉगल स्विच की तरह ब्लूटूथ संकेतक में, पायथन का उपयोग कर सकता है?

ध्यान दें : मैं इस सवाल पर इनाम देने के लिए तैयार हूं जो एक जवाब देने के लिए इनाम है जो अजगर में काम करने का उदाहरण प्रदान करेगा । अन्य भाषाओं को स्वीकार नहीं किया जाता है।


6
एप्लिकेशन संकेतक सीमित है यहां तक ​​कि मक्खी पर आइकन का समर्थन नहीं करता है (यह फाइल सिस्टम से छवि फ़ाइल को लोड करता है)। आपके द्वारा बताए गए संकेतक सिस्टम संकेतक (ब्लूटूथ, ubuntu एक, ध्वनि, शक्ति, ...) हैं। वे अलग-अलग हैं और वे लिबासपिंडैक्टर का उपयोग नहीं कर रहे हैं। मैंने पहले ही कुछ पोस्ट किए हैं जो अंतर को स्पष्ट करने में मदद कर सकते हैं। मुझे पहले से ही C. का उपयोग करके काम करने वाला एक सिस्टम इंडिकेटर मिला है, लेकिन अजगर में मैं अभी भी संघर्ष कर रहा हूं।
user.dz 8

2
क्या इस सवाल पर उबंटू कोर देवों का ध्यान आकर्षित करने का कोई तरीका है?
don.joey

1
कम से कम test = Gtk.CheckMenuItem("Monkey")चेकबटन जोड़ने का काम करता है, लेकिन अधिक होना चाहिए। जबकि वह काम करता है, यह काम करना चाहिए , लेकिन यह नहीं है Gtk.CheckMenuItemToggled("Monkey"):। मुझे पूरा यकीन है कि यह किसी भी तरह काम कर सकता है। देखें: developer.gnome.org/gtk3/stable/GtkCheckMenuItem.html
याकूब Vlijm

1
@JacobVlijm हाँ, किसी एक MENUITEM काम करता है जोड़ने, यह भी एक Gtk.Box जोड़ सकते हैं और उस बॉक्स में Gtk.Label जोड़ने के लिए काम करता है, लेकिन कुछ भी नहीं है (यह कहते विजेट केवल एक आइटम हो सकते हैं।
सर्गी Kolodyazhnyy

1
Gtk.ImageMenuItembtw का उपयोग करने के लिए पदावनत और हतोत्साहित किया गया है: developer.gnome.org/gtkmm/stable/deprecated.html
याकूब Vlijm

जवाबों:


1

यह समस्या मौजूद है क्योंकि AppIndicators एक संकेतक मेनू बनाना आसान बनाते हैं, वे एक बनाने के रास्ते में आते हैं। आइए AppIndicator का उपयोग करके उदाहरण python कोड के बीच के अंतरों को देखें और एक GLib Menus का उपयोग करके जिस तरह से ब्लूटूथ कोड करता है।

सबसे पहले आपको एक बनाने का निर्देश दिया जाता है gtk.Menu, ये पुराने स्टाइल के Gtk मेनू ऑब्जेक्ट हैं जो उपयोग Gtk.Actionकरते हैं जो अब पदावनत हो गए हैं। AppIndicator प्रक्रिया के gtk.Menuदौरान आपसे ऑब्जेक्ट लेता set_menu(...)है और इसे पार्स करता है, प्रत्येक मेनू को यह धक्का देता है कि इसका उपयोग करके बनाई गई संकेतक सेवा पर पाया जाता है libdbusmenu। पार्स करने की इस प्रक्रिया का मतलब है कि AppIndicator द्वारा समर्थित कुछ भी नहीं फ़िल्टर किया गया है, चाहे आप कुछ भी करें।

इसके बाद ब्लूटूथ मेनू को देखें। यह Gio.Menuवस्तुओं का उपयोग करके बनाया गया है, ये GActionसिस्टम का उपयोग करके नई शैली सूक्ति मेनू हैं । यह तब उपयोग किए बिना अपनी सेवा पंजीकृत करता है AppIndicatorया स्विच विजेट बनाने के लिए libdbusmenuएक कस्टम x-canonical-typeसंपत्ति का उपयोग करके सेट अप करता है जिसे libidoपार्स करने के लिए पारित किया जाता है।

यह पूरी कवायद बहुत बुरी है, क्योंकि यह सब कैनिकल की अपनी एकता की प्रथा है। इसलिए जैसे ही एकता जाती है, वैसे भी कोई तुष्टिकरण नहीं होता है।

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