Visualización y Entrada de información

De Wiki GNOME Chile
Saltar a: navegación, buscar

Contenido

Etiquetas

Las etiquetas son widgets que nos permiten mostrar información (texto) en cualquier parte de nuestro interfaz.


GtkLabel

El tipo más básico de etiqueta que podemos crear es GtkLabel, que permite crear porciones de texto (incluido multilínea) en nuestro interfaz.

En GTK+, para crearlas, se usa una de las siguientes funciones:


  GtkWidget*            gtk_label_new               (const char    *str);
  GtkWidget*            gtk_label_new_with_mnemonic (const char    *str);


Ambas funciones reciben una cadena como parámetro, pero en cada una su significado es distinto. En gtk_label_new, la cadena de texto representa el texto que queremos que sea mostrado en la etiqueta, mientras que en gtk_label_new_with_mnemonic dicha cadena representa ese mismo texto a representar en pantalla, pero con una diferencia, que es que esa cadena puede contener el carácter '_' delante de algunas letras, lo que causa que dichas letras sean mostradas con el carácter de subrayado. Esto, más adelante veremos para qué puede servir.


GtkAccelLabel

Los widgets GtkAccelLabel se usan principalmente en la construcción de menús. Muestran una etiqueta (como un widget GtkLabel normal) más una combinación de teclas a su derecha. Por ejemplo, en el siguiente trozo de código:


  GtkAccelLabel* = gtk_accel_label_new("entrada");
  gtk_accel_label_set_accel_widget(label, entry);


creamos un widget de tipo GtkAccelLabel que contendrá la etiqueta "entrada". En la segunda línea de código, indicamos que la etiqueta que acabamo de crear debe vigilar y mostrar constantemente el atajo de teclado que tenga definido el widget entry. Así, si en el código asignas el atajo ctrl+P como la señal de activación de entry, GTK+ mostrará esa combinación de teclas en la etiqueta del widget GtkAccelLabel, al lado del texto "entrada". El GtkAccelLabel vigilará los cambios que se realicen en tiempo de ejecución en la combinación de teclas. Si cambiáramos el atajo de teclado por programación, AccelLabel se enteraría y mostraría el nuevo atajo al lado del texto "entrada". Para ver las diferencias existentes entre GtkAccelLabel y GtkLabel es interesante comparar el trozo de código anterior con el siguiente:


  GtkLabel* label = gtk_label_new_with_mnemonic("_something");
  gtk_label_set_mnemonic_widget(label, entry);


Este trozo de código crea una etiqueta con la letra s de "something" subrayada, lo que indica que GTK+ creará un atajo de teclado automáticamente con la combinación de teclas alt+s para el widget entry. Es decir, cuando pulsemos alt+s, se activará el widget entry. * FIXME * Debe haber una referencia que indique: para conocer un caso práctico del uso de gtk-accel-label, obsérvese el ejemplo gtk-accel-label-example * FIXME * A continuación, veremos un ejemplo de código que muestra el uso de gtk-accel-label y la creación manual de menús.



#include <gtk/gtk.h>

gint Delete (GtkWindow *widget, gpointer data) {
        gtk_main_quit();
        return FALSE;
}


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

        GtkWidget *window;      /* Top-level window */
        GtkWidget *menubar;     /* To hold our sample "File" menu */
        GtkWidget *menuitem;    /* Used for the "File","New","Open" MenuItems */
        GtkWidget *submenu;     /* The actual "menu" holding "New", "Open" */

        GtkAccelGroup *accel;   /* Our accel group */
        GtkWidget *accel_label; /* Our GtkAccelLabel */

        gtk_init(&argc, &argv);

        /* Create top-level window */
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_position(GTK_WINDOW (window), GTK_WIN_POS_CENTER_ALWAYS);
        g_signal_connect(G_OBJECT (window), "delete_event",
                 G_CALLBACK (Delete), NULL);

        /* Create our accel group, attach it to our top-level window */
        accel = gtk_accel_group_new();
        gtk_window_add_accel_group(GTK_WINDOW (window), accel);
        /* The accels are added down below... */

        /* create the menu bar as the only widget in our "window" */
        menubar = gtk_menu_bar_new();
        gtk_container_add(GTK_CONTAINER(window), menubar);
        gtk_widget_show(menubar);

        /* Create the "File" GtkMenuItem */
        menuitem = gtk_menu_item_new_with_label("File");
        gtk_menu_bar_append(GTK_MENU_BAR(menubar), menuitem);
        gtk_widget_show(menuitem);

        /* Create the actual drop-down menu (called "submenu") */
        submenu = gtk_menu_new();
        /* set it to be the submenu of "File" */
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);

        /* Create "New" entry in our submenu: */
        menuitem = gtk_menu_item_new_with_label("New");
        gtk_menu_append(GTK_MENU(submenu), menuitem);

        /* Finally, add an accelerator for "New" of CTRL-N */
        gtk_widget_add_accelerator(menuitem,
        "activate", accel, 'N', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);

        /* Wrap up the "New" GtkMenuItem by showing it: */
        gtk_widget_show(menuitem);


        /* Create a second GtkMenuItem ("Open") */
        /* Now with GtkAccelLabel... */
        menuitem = gtk_menu_item_new();

        accel_label = gtk_accel_label_new("Open");

        /* We attach it to 'menuitem', which is the GtkMenuItem */

        gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(accel_label), menuitem);
        gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
        gtk_widget_show(accel_label);

        /* All done--add this menuitem to the submenu and show it... */
        gtk_menu_append(GTK_MENU(submenu), menuitem);
        gtk_widget_show(menuitem);

        /* Now, add an accelerator to the Open menuitem */
        gtk_widget_add_accelerator(menuitem,
        "activate", accel, 'P', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);


        gtk_widget_show(window);

        gtk_main();

        return 0;

}


Entrada de datos

  • GtkEntry - a single line text entry field.
Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas