Comment ajouter un widget pygtk à la palette Glade?


8

Disons que j'ai créé un widget gtk comme celui-ci:

class AwesomeTextView (gtk.TextView):

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

Comment puis-je ajouter mon nouveau widget à la palette dans Glade Interface Builder?

entrez la description de l'image ici

Réponses:


7

D'accord, cela va se faire étape par étape:

  • Notre widget va être nommé AwesomeTextView, le module dans lequel il se trouvera sera appelé awesome_text_view. Ce sont les seuls noms dont nous avons besoin.

Un widget clairière se compose de deux parties, le module et le catalogue.

  1. Nous créons un catalogue, awesome_text_view.xmlet (en tant que root) l'enregistrons sur/usr/share/glade3/catalogs/

    Voici à quoi ça ressemble:

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

    Vous devez copier et adapter ce modèle, car il fonctionne . :-)

  2. Nous créons un module, awesome_text_view.pyet (à nouveau en tant que root) l'enregistrons à/usr/lib/glade3/modules/

    Voici à quoi cela ressemble:

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

    Il est maintenant affiché dans Glade et vous pouvez l'ajouter à votre application.

  3. Enfin, vous aurez juste besoin de

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

C'est ça!

Voici une petite application de test montrant comment utiliser votre widget:

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

Donc, dans la pratique, il n'y a aucun moyen de distribuer facilement le widget personnalisé avec votre code et de laisser les contributeurs l'ajouter à Glade sans qu'ils aient à l'installer manuellement sur leurs systèmes, je comprends. Glade est génial, dommage que des widgets personnalisés ne puissent pas être ajoutés sans avoir à entrer dans les tripes du système. En tout cas, belle réponse!
David Planella

Cela ne fonctionne pas pour moi en 12.04. Glade imprime ceci: (glade: 25053): GladeUI-WARNING **: Échec du chargement de la bibliothèque externe 'gladepython'
user1477

1

Vous devez faire un catalogue pour vos widgets, voir ce dossier: /usr/share/glade3/catalogs/et vous verrez gnome.xml, regardez un exemple.

Voir aussi la documentation de gnome:

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


Ne fonctionne pas :-( Il semble que la documentation est tout simplement erronée, je vais mettre à jour ma question. Aussi, vouliez-vous dire gtk+.xml, ou suis-je simplement absent gnome.xmlpour une raison quelconque?
Stefano Palazzo

Vous devez créer votre propre fichier xml, pas en modifier un existant.
Martin Owens -doctormo-

J'ai compris cela, c'est juste que je n'ai pas gnome.xml, et je me suis demandé si cela pouvait indiquer un problème. Les instructions dans le lien que vous avez posté sont de toute façon erronées, y travaillant toujours :-)
Stefano Palazzo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.