Làm cách nào để thêm Widget pygtk vào bảng màu Glade?


8

Giả sử tôi đã tạo một Widget gtk như thế này:

class AwesomeTextView (gtk.TextView):

    def set_font(self, font_description):
        self.modify_font(pango.FontDescription(font_description))

Làm cách nào tôi có thể thêm tiện ích mới vào bảng màu trong Trình tạo giao diện Glade?

nhập mô tả hình ảnh ở đây

Câu trả lời:


7

Được rồi, đây sẽ là từng bước:

  • Tiện ích của chúng tôi sẽ được đặt tên AwesomeTextView, mô-đun nó sẽ được gọi awesome_text_view. Đây là những cái tên duy nhất chúng ta cần.

Một widget glade bao gồm hai phần, mô-đun và danh mục.

  1. Chúng tôi tạo một danh mục awesome_text_view.xmlvà (dưới dạng root) lưu nó tại/usr/share/glade3/catalogs/

    Đây là những gì nó trông giống như:

    <glade-catalog name="awesome_text_view"
        library="gladepython"
        domain="glade-3"
        depends="gtk+">
    
     <init-function>glade_python_init</init-function>
    
     <glade-widget-classes>
       <glade-widget-class title="Awesome TextView"
        name="AwesomeTextView"
        generic-name="awesome_text_view"/>
     </glade-widget-classes>
    
     <glade-widget-group name="python" title="Python">
       <glade-widget-class-ref name="AwesomeTextView"/>
     </glade-widget-group>
    </glade-catalog>

    Bạn nên sao chép và điều chỉnh mẫu này, vì nó hoạt động . :-)

  2. Chúng tôi tạo một mô-đun awesome_text_view.pyvà (một lần nữa là root) lưu nó tại/usr/lib/glade3/modules/

    Đây là những gì trông giống như:

    import gobject
    import gtk
    import pango
    
    
    class AwesomeTextView (gtk.TextView):
    
        __gtype_name__ = 'AwesomeTextView'
    
        def __init__(self):
            gtk.TextView.__init__(self)
    
        def set_font(self, font_description):
            self.modify_font(pango.FontDescription(font_description))

    Hiện tại nó được hiển thị trong Glade và bạn có thể thêm nó vào ứng dụng của mình.

  3. Cuối cùng, bạn sẽ chỉ cần

        export PYTHONPATH="$PYTHONPATH:/usr/lib/glade3/modules/"

Đó là nó!

Đây là một ứng dụng thử nghiệm nhỏ cho thấy cách sử dụng widget của bạn:

import gtk
import awesome_text_view

class App (object):

    builder = gtk.Builder()

    def __init__(self):
        self.builder.add_from_file("test.glade")
        self.builder.connect_signals(self)
        self.builder.get_object("awesome_text_view1").set_font("mono")
        gtk.main()

    def on_window1_destroy(self, widget):
        gtk.main_quit()


App()

Vì vậy, trong thực tế, không có cách nào để dễ dàng phân phối widget tùy chỉnh với mã của bạn và cho phép những người đóng góp thêm nó vào Glade mà không cần họ phải cài đặt thủ công trên hệ thống của họ, tôi hiểu. Glade là tuyệt vời, thật đáng tiếc rằng các widget tùy chỉnh không thể được thêm vào mà không cần phải đi vào ruột của hệ thống. Trong mọi trường hợp, câu trả lời tốt đẹp!
David Planella

Điều này không làm việc cho tôi trong 12.04. Glade in này: (glade: 25053): GladeUI-CẢNH BÁO **: Không thể tải thư viện bên ngoài 'joyepython'
user1477

1

Bạn cần tạo một danh mục cho các vật dụng của mình, xem thư mục này: /usr/share/glade3/catalogs/và bạn sẽ thấy gnome.xml, hãy xem ví dụ.

Xem thêm tài liệu gnome:

http://developer.gnome.org/gladeui/ sóng / catalogintro.html


Không làm việc :-( Có vẻ như rằng các tài liệu chỉ đơn giản là sai, tôi sẽ cập nhật câu hỏi của tôi Ngoài ra, bạn có ý nghĩa. gtk+.xml, Hay tôi chỉ còn thiếu gnome.xmlđối với một số lý do?
Stefano Palazzo

Bạn phải tạo tệp xml của riêng bạn, không sửa đổi tệp hiện có.
Martin Owens -doctormo-

Tôi hiểu rằng, chỉ là tôi không có gnome.xml và tôi tự hỏi liệu đó có phải là dấu hiệu của một vấn đề không. Các hướng dẫn trong liên kết bạn đã đăng bị sai trong mọi trường hợp, vẫn hoạt động trên đó :-)
Stefano Palazzo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.