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.
La siguiente operación consiste en definir la ventana principal de la aplicación, para ello utilizamos Glade:
Hay que definir las señales tanto para las cajas de texto como para los combo, estas luego se unen en el código:
Se definió la modificación de la caja de texto como on_entry1_changed, la misma operación se hace para la otra caja de texto, de esta manera al modificar el valor en una caja de texto se modifica en la otra, pasándola por un factor de conversión.
Se añade la señal on_combobox1_changed en el combo de magnitud. Esto se hace para los tres combos, dado que al modificar el combo de magnitudes se modifican los dos combos de unidades, y al modificar los combos de unidades se modifican las entradas, por el cambio de factor de conversión.
Una vez definido la aplicación queda como esto:
El código asociado al archivo glade es:
<?xml version="1.0"?> <interface> <requires lib="gtk+" version="2.16"/> <!-- interface-naming-policy project-wide --> <object class="GtkWindow" id="window"> <property name="width_request">720</property> <property name="height_request">150</property> <signal name="destroy" handler="on_window_destroy"/> <child> <object class="GtkFixed" id="fixed1"> <property name="width_request">620</property> <property name="height_request">150</property> <property name="visible">True</property> <child> <object class="GtkEntry" id="entry2"> <property name="width_request">160</property> <property name="height_request">30</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">●</property> <signal name="changed" handler="on_entry2_changed"/> </object> <packing> <property name="x">120</property> <property name="y">100</property> </packing> </child> <child> <object class="GtkEntry" id="entry1"> <property name="width_request">160</property> <property name="height_request">30</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">●</property> <signal name="changed" handler="on_entry1_changed"/> </object> <packing> <property name="x">120</property> <property name="y">60</property> </packing> </child> <child> <object class="GtkLabel" id="label3"> <property name="width_request">100</property> <property name="height_request">30</property> <property name="visible">True</property> <property name="label" translatable="yes">A:</property> <property name="wrap">True</property> </object> <packing> <property name="x">20</property> <property name="y">100</property> </packing> </child> <child> <object class="GtkLabel" id="label2"> <property name="width_request">100</property> <property name="height_request">30</property> <property name="visible">True</property> <property name="label" translatable="yes">De:</property> <property name="wrap">True</property> </object> <packing> <property name="x">20</property> <property name="y">60</property> </packing> </child> <child> <object class="GtkLabel" id="label1"> <property name="width_request">100</property> <property name="height_request">30</property> <property name="visible">True</property> <property name="label" translatable="yes">Magnitud:</property> <property name="wrap">True</property> </object> <packing> <property name="x">20</property> <property name="y">20</property> </packing> </child> <child> <object class="GtkComboBox" id="combobox1"> <property name="width_request">400</property> <property name="height_request">30</property> <property name="visible">True</property> <signal name="changed" handler="on_combobox1_changed"/> </object> <packing> <property name="x">300</property> <property name="y">20</property> </packing> </child> <child> <object class="GtkComboBox" id="combobox2"> <property name="width_request">400</property> <property name="height_request">30</property> <property name="visible">True</property> <signal name="changed" handler="on_combobox2_changed"/> </object> <packing> <property name="x">300</property> <property name="y">60</property> </packing> </child> <child> <object class="GtkComboBox" id="combobox3"> <property name="width_request">400</property> <property name="height_request">30</property> <property name="visible">True</property> <signal name="changed" handler="on_combobox3_changed"/> </object> <packing> <property name="x">300</property> <property name="y">100</property> </packing> </child> </object> </child> </object> </interface>