Aprendiendo GTK+: Ventanas

Publicado en C/C++, GTK el 23 de September, 2008 por Fran.

He aquí otro capítulo de esta serie que deje abandonada hace tiempo, ya que cuando uno empieza a trabajar le quedan pocas ganas al llegar a casa de ponerse a pensar, pero resulta que desde hace días me han venido las ganas de revitalizar este blog.

Las ventanas

Las ventanas son los widgets raíces, ya que sin ellas no podría haber aplicación. Hereda las propiedades de GtkContainer, por lo que puede contener a otro widget (¡cuidado! sólo a uno), por lo que lo normal es que dentro de una ventana se introduzca un GtkBox de algún tipo, en el que se coloquen el resto de widgets de la aplicación.

Como veis en el título digo ventanas, y es que hay varios tipos de ventanas:

  • GtkDialog: Crea una ventana emergente. Dentro de este tipo de ventanas existen varios tipos predefinidos como el dialogo de “Acerca de”, el de elección de archivo, el de elección de color, …
  • GtkInvisible: Crea una ventana invisible.
  • GtkMessageDialog: Crea una ventana con un mensaje personalizado, es uno de los tipos predefinidos del GtkDialog. Son las ventanas que muestran mensajes de error, advertencia, …
  • GtkWindow: Crea una ventana normal y corriente. Será el widget que se use como base para cualquier aplicación.
  • GtkAssistant: Crea un asistente para guiar al usuario en varios pasos.

Como he dicho, de todos estos tipos el más importante es GtkWindow, que es la ventana normal y corriente que tiene cualquier aplicación.

Como cualquier widget de GTK, GtkWindow es muy fácil de manejar con echar un ojo a la documentación de la API se aprende rápido como funciona todo. A continuación os pongo un trozo de código en el que creo una ventana vacía:

#include <gtk/gtk.h>

int main (int argc, char *argv[]) {

    GtkWindow *window;

    gtk_init (&argc, &argv);

    window = (GtkWindow *) gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (window, "Soy una ventana");

    g_signal_connect (G_OBJECT (window), "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);

    gtk_widget_show_all (GTK_WIDGET (window));
    gtk_main ();

    return 0;
}

Este código muestra una ventana con el título Soy una ventana.

6 comentarios

  1. Jó, macho… parece que nos ponemos de acuerdo para publicar ;)

    #  Lek 23 de September, 2008

  2. Hola a todos. tngo q empezar a programar un poco en gtk+, y la verda esk estos articulos me estan viniendo muy bien para empezar a entender que es y como va esto.
    e visto el articulo en la que preguntabais si seguiais escribiendo, y mi respuesta esk sigais, ya que es algo q os gusta, y ademas, ayuda a mucha gente como yo, a comprender cosas que en otro tipo de bibliografia, seria muxo mas complicado.

    un saludo

    #  F1234 6 de December, 2008

  3. F1234 gracias, sólo te pido que la próxima vez que comentes, escribas todas las letras de cada palabra para que todos te podamos entender sin tener que contratar a un traductor.

    #  Fran 6 de December, 2008

  4. [...] comencé explicándoos como funcionan las ventanas y los contenedores de GTK+ creo que lo mejor habría sido explicar primero qué son y cómo [...]

    #  Aprendiendo GTK+: Destripando los widgets | 4 bits blog 9 de December, 2008

  5. Hola de nuevo, estaba probando el programa que esta en este POST, y no me deja ejecutarlo.
    cuando le doy a linkar me aparece el mensaje:
    “7: error: cannot convert `GtkWidget*’ to `GtkWindow*’ in assignment”, en la linea 9.
    podrías decirme que es lo que ocurre?

    para compilarlo, uso el programa MINGW STUDIO.
    un saludo

    #  F1234 13 de December, 2008

  6. F1234 la función gtk_window_new () devuelve un GtkWidget, lo que está ocurriendo es que tu compilador debe ser un poco estricto y no te deja asignar punteros de tipos diferentes sin hacer un casting.

    Yo lo he probado con gcc 4.3 y sólo da un aviso, la solución es cambiar la línea a esta:

    window = (GtkWindow *) gtk_window_new (GTK_WINDOW_TOPLEVEL);

    #  Fran 13 de December, 2008

Escribe un comentario