Señales y eventos en Gtk

Hacer una aplicación gráfica para Linux

Este es uno de los capítulos del tutorial Hacer una aplicación gráfica para Linux. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Introducción

En el artículo anterior habíamos generado la interfaz gráfica a utilizar con la aplicación y en ella habíamos definido las señales o eventos que se tenían que controlar. Ahora se trata de definir en Python estas señales. En caso de no hacerlo, al correr la aplicación simplemente nos da un aviso de que la señal no está definida.

(NOTA: Por cierto, y antes de continuar, quiero indicar que he cambiado de editor de Python. Estaba utilizando eclipse, pero me he pasado a Geany. La razón es que es muy ligero. Ya iré comentando conforme lo utilice.)

Bueno, como comentaba. La primera señal a definir corresponde al cambio de magnitud. Esta obliga a cambiar los dos combos de unidades:

def on_combobox1_changed(self,widget):
    magnitud = Magnitud.select(Magnitud.q.nombre==self.get_active_text(self.combobox1))
    unidades = Unidad.select(Unidad.q.magnitud==magnitud[0].id)
    self.combobox2.clear() self.combobox3.clear()
    model2 = gtk.ListStore(str)
    for unidad in unidades:
        print unidad.nombre
        model2.append([unidad.nombre])
    self.combobox2.set_model(model2)
    self.combobox3.set_model(model2)
    cell2 = gtk.CellRendererText()
    self.combobox2.pack_start(cell2,True)
    self.combobox2.add_attribute(cell2,`text`,0)
    self.combobox2.set_active(0)
    cell3 = gtk.CellRendererText()
    self.combobox3.pack_start(cell3,True)
    self.combobox3.add_attribute(cell3,`text`,0)
    self.combobox3.set_active(0)

Lo mismo sucede al cambiar cualquiera de las dos magnitudes, tanto la de procedencia como la de destino:

def on_combobox2_changed(self,widget):
    unidad1 = Unidad.select(Unidad.q.nombre==self.get_active_text(self.combobox2))
	unidad2 = Unidad.select(Unidad.q.nombre==self.get_active_text(self.combobox3))
	factor=unidad1[0].factor/unidad2[0].factor
	valor=self.entry1.get_text()
	self.entry2.set_text(str(self.toFloat(valor)*factor))
	self.entry1.set_text(valor)

que es la misma función que se utiliza al modificar el campo «De». Con esto quedan todas las señales completas.

En el próximo capítulo, ya estará toda la aplicación montada y extenderemos las propiedades correspondientes a guardar las preferencias en un archivo INI y añadir algunas imágenes y quedará completamente terminado.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *