Bagaimana cara menambahkan Widget pygtk ke palet Glade?

8

Katakanlah saya telah membuat gtk Widget seperti ini:

class AwesomeTextView (gtk.TextView):

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

Bagaimana saya bisa menambahkan widget baru saya ke palet di Glade Interface Builder?

masukkan deskripsi gambar di sini

Stefano Palazzo
sumber

Jawaban:

7

Oke, ini akan menjadi langkah demi langkah:

  • Widget kami akan dinamai AwesomeTextView, modul di dalamnya akan dipanggil awesome_text_view. Ini adalah satu-satunya nama yang kami butuhkan.

Widget glade terdiri dari dua bagian, modul dan katalog.

  1. Kami membuat katalog,, awesome_text_view.xmldan (sebagai root) simpan di/usr/share/glade3/catalogs/

    Seperti inilah tampilannya:

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

    Anda harus menyalin dan mengadaptasi templat ini, karena berfungsi . :-)

  2. Kami membuat modul,, awesome_text_view.pydan (lagi sebagai root) simpan di/usr/lib/glade3/modules/

    Begini tampilannya:

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

    Sekarang ditampilkan di Glade, dan Anda dapat menambahkannya ke aplikasi Anda.

  3. Akhirnya, Anda hanya perlu melakukannya

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

Itu dia!

Inilah sedikit aplikasi pengujian yang menunjukkan cara menggunakan widget Anda:

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()
Stefano Palazzo
sumber
Jadi dalam praktiknya, tidak ada cara untuk dengan mudah mendistribusikan widget khusus dengan kode Anda dan membiarkan kontributor menambahkannya ke Glade tanpa mereka harus menginstalnya secara manual di sistem mereka, saya mengerti. Glade hebat, sayang bahwa widget khusus tidak dapat ditambahkan tanpa harus masuk ke nyali sistem. Bagaimanapun, jawaban yang bagus!
David Planella
Ini tidak berfungsi untuk saya dalam 12.04. Glade mencetak ini: (glade: 25053): GladeUI-WARNING **: Gagal memuat pustaka eksternal 'gladepython'
user1477
1

Anda perlu membuat katalog untuk widget Anda, lihat folder ini: /usr/share/glade3/catalogs/dan Anda akan lihat gnome.xml, lihat contohnya.

Lihat juga dokumentasi gnome:

http://developer.gnome.org/gladeui/stable/catalogintro.html

Martin Owens -doctormo-
sumber
Tidak berfungsi :-( Sepertinya dokumentasi itu salah, saya akan memperbarui pertanyaan saya. Juga, maksud Anda gtk+.xml, atau saya hanya hilang gnome.xmlkarena suatu alasan?
Stefano Palazzo
Anda harus membuat file xml Anda sendiri, bukan memodifikasi yang sudah ada.
Martin Owens -doctormo-
Saya mengerti itu, hanya saja saya tidak punya gnome.xml, dan saya bertanya-tanya apakah itu bisa menjadi indikasi masalah. Instruksi dalam tautan yang Anda posting salah dalam hal apa pun, masih bekerja di atasnya :-)
Stefano Palazzo