Estou usando o Ubuntu 16.04, o python 3.5.1-3 e o Glade 3.18.3. Meu widget já contém um "esquema" glade, já que ele é composto de mais de um widget "padrão" e é mais fácil criar sua "GUI" no Glade do que criá-lo no código.
O xml para widget é:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkBox" id="boxMain">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkArrow" id="arrowprevious">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">left</property>
<signal name="button-release-event" handler="on_arrowprevious_button_release_event" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkArrow" id="arrownext">
<property name="visible">True</property>
<property name="can_focus">False</property>
<signal name="button-release-event" handler="on_arrownext_button_release_event" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>
Eu também tenho mais "personalizações" no script python. Diga
#Gtk.Window is just for example because I load more widgets
class MyWidget(Gtk.Window):
def __init__( self, acustomlist):
#for the moment I add it from glade file in the same directory
self.counter = 0
self.thelist = acustomlist
#TODO: check len of list and type of list contents (if str type)
self.mybuilder = Gtk.Builder()
self.mybuilder.add_from_file("aWidget.glade")
Gtk.Window.__init__(self, name='windowMain')
self.add(self.mybuilder.get_object('boxMain'))
self.mybuilder.connect_signals(self)
def on_arrowprevious_button_release_event(self):
self.counter +=1
if self.counter >= len(self.thelist):
self.counter = len(self.thelist) - 1
self.mybuilder.get_object('label1').set_label(self.thelist[self.counter])
def on_arrownext_button_release_event(self):
self.counter -=1
if self.counter < 0:
self.counter = 0
self.mybuilder.get_object('label1').set_label(self.thelist[self.counter])
A questão é como adicionar isso à paleta de clareiras. Nenhum dos / usr / share nem / usr / lib / contain glade3 (como sugerido em Como adicionar um widget pygtk à paleta Glade? ), apenas um catálogo glade.
O código "esquema" para o widget também deve estar disponível no computador de destino. Usando as instruções no link acima mencionado só estará disponível no meu computador.