Wie füge ich der Glade-Palette ein pygtk-Widget hinzu?

8

Angenommen, ich habe ein GTK-Widget wie folgt erstellt:

class AwesomeTextView (gtk.TextView):

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

Wie kann ich mein neues Widget zur Palette im Glade Interface Builder hinzufügen?

Geben Sie hier die Bildbeschreibung ein

Stefano Palazzo
quelle

Antworten:

7

Okay, das wird Schritt für Schritt sein:

  • Unser Widget wird benannt AwesomeTextView, das Modul, in dem es sich befindet, wird aufgerufen awesome_text_view. Dies sind die einzigen Namen, die wir brauchen.

Ein Glade-Widget besteht aus zwei Teilen, dem Modul und dem Katalog.

  1. Wir erstellen einen Katalog awesome_text_view.xmlund speichern ihn (als root) unter/usr/share/glade3/catalogs/

    So sieht es aus:

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

    Sie sollten diese Vorlage kopieren und anpassen, da sie funktioniert . :-)

  2. Wir erstellen ein Modul awesome_text_view.pyund speichern es (wieder als root) unter/usr/lib/glade3/modules/

    So sieht das aus:

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

    Es wird jetzt in Glade angezeigt und Sie können es Ihrer Anwendung hinzufügen.

  3. Schließlich müssen Sie nur noch

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

Das ist es!

Hier ist eine kleine Test-App, die zeigt, wie Sie Ihr Widget verwenden:

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
quelle
In der Praxis gibt es also keine Möglichkeit, das benutzerdefinierte Widget einfach mit Ihrem Code zu verteilen und die Mitwirkenden zu Glade hinzufügen zu lassen, ohne dass sie es manuell auf ihren Systemen installieren müssen. Glade ist großartig, schade, dass benutzerdefinierte Widgets nicht hinzugefügt werden können, ohne in die Eingeweide des Systems gehen zu müssen. Auf jeden Fall schöne Antwort!
David Planella
Dies funktioniert bei mir in 12.04 nicht. Glade druckt Folgendes aus: (glade: 25053): GladeUI-WARNUNG **: Fehler beim Laden der externen Bibliothek 'gladepython'
user1477
1

Sie müssen einen Katalog für Ihre Widgets erstellen, siehe diesen Ordner: /usr/share/glade3/catalogs/und Sie werden sehen gnome.xml, suchen Sie nach einem Beispiel.

Siehe auch die Gnomendokumentation:

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

Martin Owens -doctormo-
quelle
Funktioniert nicht :-( Es scheint, dass die Dokumentation einfach falsch ist, ich werde meine Frage aktualisieren. Meinten Sie auch gtk+.xml, oder fehlt ich nur gnome.xmlaus irgendeinem Grund?
Stefano Palazzo
Sie müssen Ihre eigene XML-Datei erstellen und dürfen keine vorhandene ändern.
Martin Owens -doctormo-
Ich habe das verstanden, es ist nur so, dass ich gnome.xml nicht habe, und ich habe mich gefragt, ob das auf ein Problem hindeutet. Anweisungen in dem Link, den Sie gepostet haben, sind auf jeden Fall falsch und arbeiten noch daran :-)
Stefano Palazzo