2015-11-22 5 views
6

मैं PyGObject का उपयोग कर एक जीयूआई जोड़ रहा हूँ। यह पायथन कोड संदर्भ में काम करता है। मुझे स्टॉक "ओपन" आइकन के साथ टूलबार बटन मिलता है।GTK3 में स्टॉक आइकन प्रदर्शित करने के लिए गैर-बहिष्कृत तरीका क्या है?

from gi.repository import Gtk 

# ... 

toolbar = Gtk.Toolbar() 
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR) 

# ... 

self.fileOpen = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN) 
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) 
toolbar.insert(self.fileOpen, -1) 

Image shows icon appearing on the toolbar.

लेकिन this resource के अनुसार, new_from_stock() अब मान्य नहीं है:

संस्करण 3.10 के बाद से पदावनत: उपयोग Gtk.ToolButton.new() एक साथ Gtk.Image.new_from_icon_name() बजाय साथ।

ठीक है तो। तो आगे खुदाई के बाद, यह क्या मैं एक प्रतिस्थापन के लिए साथ आए हैं:

self.fileOpen = Gtk.ToolButton(
     Gtk.Image.new_from_icon_name("document-open", 
            Gtk.IconSize.LARGE_TOOLBAR), 
     "Open") 
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) 
toolbar.insert(self.fileOpen, -1) 

लेकिन यह परिणाम है:

Image shows icon not appearing on the toolbar.

क्या ऐसा करने का सही तरीका यह है कि अभी भी समर्थित है वर्तमान जीटीके लाइब्रेरी द्वारा?

उत्तर

4

इस C++ GitHub example पर देखकर, मैं निर्माता के बजाय स्थिर new() फ़ंक्शन पर प्रत्यक्ष कॉल खोजने के लिए हैरान हूं।

इसलिए मैंने इसे आजमाने का फैसला किया। अंतर पर सावधानी से देखो। यह सूक्ष्म है।

       #vvv 
self.fileOpen = Gtk.ToolButton.new(
     Gtk.Image.new_from_icon_name("document-open", 
            Gtk.IconSize.LARGE_TOOLBAR), 
     "Open") 
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) 
toolbar.insert(self.fileOpen, -1) 

मेरे आश्चर्य के लिए, यह आइकन प्रदर्शित करता है जहां दूसरा दृष्टिकोण नहीं है।

बोनस: ऊपर की क्लीनर संस्करण:

# iconSize to be reused 
iconSize = Gtk.IconSize.LARGE_TOOLBAR 

# ... 

openIcon = Gtk.Image.new_from_icon_name("document-open", iconSize) 
self.fileOpen = Gtk.ToolButton.new(openIcon, "Open") 
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) 
toolbar.insert(self.fileOpen, -1) 
+1

आप क्या मिला के लिए विवरण: PyGObject बाइंडिंग में, वस्तुओं 'कंस्ट्रक्टर्स केवल वस्तु की GObject गुण का प्रतिनिधित्व कीवर्ड आर्ग ले। दूसरी तरफ, सी कन्स्ट्रक्टर, जो गुणों को सेट करने के लिए अक्सर अतिरिक्त सुविधा पैरामीटर होते हैं क्योंकि गुण सी में बोझिल हो सकते हैं, स्थिर 'नई()' विधियों के रूप में बंधे होते हैं। यह समान रूप से अच्छी तरह से काम करना चाहिए: 'Gtk.ToolButton (icon_widget = openIcon , लेबल = "ओपन") ' – ptomato

संबंधित मुद्दे

 संबंधित मुद्दे