2012-05-09 8 views
6

में GtkSourceView के साथ एक ग्लैड से लोड जीयूआई मैं एक ग्लैड फ़ाइल का उपयोग करने की कोशिश कर रहा हूं जिसमें PyGObject में एक GtkSourceView विजेट है। http://cjenkins.wordpress.com/2012/05/08/use-gtksourceview-widget-in-glade/PyGObject

समस्या है जब मुझे लगता है कि PyGObject से Glade लोड करना चाहते हैं:

from gi.repository import Gtk, GtkSource 
from os.path import abspath, dirname, join 

WHERE_AM_I = abspath(dirname(__file__)) 

class MyApp(object): 

    def __init__(self): 
     self.builder = Gtk.Builder() 
     self.glade_file = join(WHERE_AM_I, 'test.glade') 
     self.builder.add_from_file(self.glade_file) 

if __name__ == '__main__': 
    try: 
     gui = MyApp() 
     Gtk.main() 
    except KeyboardInterrupt: 
     pass 

जब मैं उस फ़ाइल मैं चलाने मैं कैसे Glade में नए GtkSourceView 3.0 का उपयोग शुरू करने पर एक छोटे से गाइड लिखा गया है यह त्रुटि आई:

Traceback (most recent call last): 
    File "test.py", line 15, in <module> 
    gui = MyApp() 
    File "test.py", line 11, in __init__ 
    self.builder.add_from_file(self.glade_file) 
    File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function 
    return info.invoke(*args, **kwargs) 
gi._glib.GError: Invalid object type `GtkSourceView' 

Glade फ़ाइल (test.glade) उस में सिर्फ एक GtkSourceView विजेट के साथ एक खिड़की है:

<?xml version="1.0" encoding="UTF-8"?> 
<interface> 
    <!-- interface-requires gtksourceview 3.0 --> 
    <!-- interface-requires gtk+ 3.0 --> 
    <object class="GtkWindow" id="window1"> 
    <property name="can_focus">False</property> 
    <child> 
     <object class="GtkSourceView" id="gtksourceview1"> 
     <property name="visible">True</property> 
     <property name="can_focus">True</property> 
     <property name="has_tooltip">True</property> 
     <property name="left_margin">2</property> 
     <property name="right_margin">2</property> 
     <property name="tab_width">4</property> 
     <property name="auto_indent">True</property> 
     <property name="indent_on_tab">False</property> 
     </object> 
    </child> 
    </object> 
</interface> 

इसे हल करने का तरीका अभी मेरे ज्ञान से बाहर है। मुझे लगता है कि मुझे add_from_file() को कॉल करने से पहले किसी प्रकार को पंजीकृत करने की आवश्यकता है, नहीं? किसी भी विचार का स्वागत है।

मैं उपयोग कर रहा हूँ:

  • उबंटू सटीक 12.04
  • Glade 3.12.0
  • libgtksourceview 3.0
  • जीटीके + 3,0

तरह

उत्तर

5

संबंध मैं इसे लगा बाहर: डी को सिर्फ नए प्रकार के पंजीकरण के लिए जरूरी है I add_from_file() पर कॉल करने से पहले एन GObject मुझे संदेह था।

from gi.repository import Gtk, GtkSource, GObject 
from os.path import abspath, dirname, join 

WHERE_AM_I = abspath(dirname(__file__)) 

class MyApp(object): 

    def __init__(self): 
     self.builder = Gtk.Builder() 
     self.glade_file = join(WHERE_AM_I, 'test.glade') 
     GObject.type_register(GtkSource.View) 
     self.builder.add_from_file(self.glade_file) 

if __name__ == '__main__': 
    try: 
     gui = MyApp() 
     Gtk.main() 
    except KeyboardInterrupt: 
     pass 

मैं इस जानकारी के साथ पृष्ठ को अपडेट करेंगे: बस gi.repository से आयात में GObject जोड़ सकते हैं और type_register() इस तरह कॉल करने के लिए की जरूरत है।

दया

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