Ok, isso vai ser passo a passo:
- Nosso widget será nomeado
AwesomeTextView
, o módulo em que ele será chamadoawesome_text_view
. Estes são os únicos nomes que precisamos.
Um widget glade consiste em duas partes, o módulo e o catálogo.
-
Criamos um catálogo,
awesome_text_view.xml
e (como root) salvamos em/usr/share/glade3/catalogs/
Isto é o que parece:
<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>
Você deve copiar e adaptar este modelo, pois ele funciona . : -)
-
Criamos um módulo,
awesome_text_view.py
e (novamente como root), salve-o em/usr/lib/glade3/modules/
Veja o que parece:
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))
Agora ele é exibido no Glade e você pode adicioná-lo ao seu aplicativo.
-
Finalmente, você só precisa
export PYTHONPATH="$PYTHONPATH:/usr/lib/glade3/modules/"
É isso aí!
Aqui está um pequeno aplicativo de teste mostrando como usar seu 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()