Añadiendo Componentes: los contenedores
La
función
add de Gtk::Window nos ha permitido añadir el
componente Label o etiqueta en el programa anterior. Quizás
estemos tentados en añadir otro componente (por ejemplo, un
botón Gtk::Button) añadiendo las siguientes
líneas
de código a nuestro programa:
#include <gtkmm.h>
#include <glib.h>
int main(int argc, char *argv[])
{
GString * mensaje;
mensaje = g_string_new( "Hola ");
if (argc>1)
{
g_string_append(mensaje, argv[1]);
}else{
g_string_append (mensaje, "DESCONOCIDO");
}
Gtk::Main programa(argc, argv);
Gtk::Window miventanica;
Gtk::Label
etiqueta(mensaje->str);
miventanica.add(etiqueta);
etiqueta.show();
miventanica.set_title("maestrodenada.com");
Gtk::Button
contador("pulsame");
miventanica.add(contador);
contador.show();
Gtk::Main::run(miventanica);// Echar a
correr nuestra ventana
return 0;
}
El programa compila y se ejecuta, pero sin aparecer el botón.
Y en el terminal, nos aparece un mensaje de advertencia,
indicándonos que el
Gtk::Window solo admite un
widget...¡qué decepción! pues rara vez un
programa tendrá sólo un componente.
Esto es así, porque Gtk::Window está desarrollada
como un contenedor simple, sólo admite un widget [heredan de
Gtk::Bin la función add() y remove(), para añadir y
quitar el widget].
Para poder realizar ventanas con varios componentes, Gtkmm tiene
implementados unos widget que admiten varios widgets: los
contenedores.
Para añadir controles en estos contenedores, se utiliza la
función
pack_start() [no add()].
Esto es, para realizar algo como esto:
Vamos a añadir a Gtk::Window un widget que permita
añadir a su vez varios widgets, será el
Gtk::VBox , con la función
add().
En este VBox (caja vertical) vamos a añadir tres elementos-
con
pack_start() -, un widgets etiqueta (
Gtk::Label), una línea
separadora (
Gtk::HSeparator) y un botón (
Gtk::Button).
#include <gtkmm.h>
int main(int argc, char *argv[])
{
Gtk::Main programa(argc, argv);
// declarando todo lo que hace falta
Gtk::Window miventanica;
Gtk::VBox principal;
Gtk::HSeparator linea;
Gtk::Label etiqueta("Pulsa abajo");
Gtk::Button
contador("¡AQUÍ!");
// añadimos el VBox al Window
miventanica.add(principal);
// añadiendo nuestros elementos
al VBox
principal.pack_start(etiqueta);
principal.pack_start(linea);
principal.pack_start(contador);
// haciéndolo todo visible
principal.show();
etiqueta.show();
contador.show();
linea.show();
miventanica.set_title("maestrodenada.com");
miventanica.resize(260,110);
Gtk::Main::run(miventanica);
return 0;
}