Supposons 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?
Ok, ça va être étape par étape:
AwesomeTextView
, le module dans lequel il se trouve s'appellera awesome_text_view
. Ce sont les seuls noms dont nous avons besoin.Un widget Glade se compose de deux parties, le module et le catalogue.
Nous créons un catalogue, awesome_text_view.xml
, et (en tant que root), l'enregistrons sous /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 fonctionne. :-)
Nous créons un module, awesome_text_view.py
, et (encore une fois en tant que root), l'enregistrons sous /usr/lib/glade3/modules/
Voici à quoi ça ressemble:
import gobject
import gtk
import pango
class AwesomeTextView (gtk.TextView):
__gtype_= '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.
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()
Vous devez créer un catalogue pour vos widgets, voir ce dossier: /usr/share/glade3/catalogs/
et vous verrez gnome.xml
, cherchez un exemple.
Voir aussi la documentation de gnome: