2012-05-09 19 views
6

Tôi đang cố gắng sử dụng tệp Glade có tiện ích GtkSourceView trong PyGObject. Tôi đã viết một hướng dẫn nhỏ về cách bắt đầu sử dụng GtkSourceView mới 3.0 trong Glade: http://cjenkins.wordpress.com/2012/05/08/use-gtksourceview-widget-in-glade/Tải GUI từ Glade với GtkSourceView trong PyGObject

Vấn đề là khi tôi muốn tải mà Glade từ PyGObject:

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 

Khi tôi chạy tập tin đó tôi nhận lỗi này:

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' 

File Glade (test.glade) chỉ là một cửa sổ với một widget GtkSourceView trong đó:

<?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> 

Làm thế nào để giải quyết điều này là do kiến ​​thức của tôi ngay bây giờ. Tôi cho rằng tôi cần phải đăng ký một số loại trước khi gọi add_from_file(), phải không? Bất kỳ ý tưởng được hoan nghênh.

Tôi đang sử dụng:

  • Ubuntu Precise 12.04
  • Glade 3.12.0
  • libgtksourceview 3,0
  • Gtk + 3,0

Kind coi

Trả lời

5

I figured it ra: DI chỉ cần đăng ký loại mới i n Gobject trước khi gọi add_from_file() như tôi nghi ngờ. Chỉ cần thêm GObject trong nhập khẩu từ gi.repository và gọi type_register() như thế này:

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 

tôi sẽ cập nhật trang web với thông tin này.

Trân trọng

Các vấn đề liên quan