Login
Immer anmelden
SSL Login

 
Newsletter
Werbung
Shopping
International Shopping
 
 


Yatego Shopping bei über 10000 Händlern und über
3 Mio. Artikel.


Linux

:

Linux-Bücher

Handy
Shop

  und Computer.

Viele Services

:

Apple iPad Reader,


Ratgeber,

 

Techniktops,

 

Yatego Clicks

  & über 3000

Gutscheine.

 
So, 5. Dezember 1999, 00:00

GTK Workshop: Teil IV

Das Button-Widget

Da wir uns in den früheren Teilen des GTK-Workshops mit den Grundlagen auseinandergesetzt haben, werde ich im vierten Teil (und einigen späteren Teilen) auf die verschiedenen Widget-Typen und ihre Eigenarten eingehen. Das Button-Widget soll dabei den Anfang machen. Eine Art des Button-Widgets kennen Sie bereits: die normalen Buttons.

Alle Beispiele diese Teils sind hier herunterzuladen.

Normale Buttons

Normale Buttons sind sehr leicht zu handhaben, deshalb werden sie hier auch nicht sonderlich besprochen. Es gibt zwei Wege, einen Button zu erstellen:

Erste Möglichkeit: Man erstellt einen Button, in dem der Text schon drin ist. Dies geschieht mit der Funktion gtk_button_new_with_label().

Die zweite Möglichkeit ist, einen leeren Button zu erstellen. So einen Button kann man mit gtk_button_new()erstellen. Dort kann man dann Bilder, Texte oder andere Widgets reinpacken (siehe Teil 3 des GTK-Workshops).

Ein Beispiel zu gtk_button_new()

#include <gtk/gtk.h>
int main( int argc, char *argv&#91;&#93; )
{
 GtkWidget *window;
 GtkWidget *button;
 GtkWidget *label;
 gtk_init( &argc,&argv );
 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
 button = gtk_button_new();
 label = gtk_label_new("Ein label");
 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
 /* der Button wird ins Fenster gepackt. Auf diese Weise können Sie
 aber auch Widgets in Buttons und alle anderen Container-Widgets
 packen */
 gtk_container_add( GTK_CONTAINER( window ), button );
 /* Das Label kann in den Button gepackt werden. Hier können auch
 andere Widgets, wie PackBoxes oder Radiobuttons,
 platziert werden */
 gtk_container_add( GTK_CONTAINER( button ), label );
 /* alle Widgets, die mit 'window' in Verbindung stehen, werden
 angezeigt */
 gtk_widget_show_all( window );
 gtk_main();
 return 0;
}

Nach dem Compilieren sollte es in etwa so aussehen:

Ein Button kann folgende Signale zurückwerfen:

  • pressed - wenn der Button gedrückt wird
  • released - wenn der Button losgelassen wird
  • clicked - wenn der Button gedrückt und losgelassen wird
  • enter - wenn der Mauszeiger über den Button geht
  • leave - wenn der Mauszeiger den Button verlässt :-(

Toggle Buttons

Toggle Buttons sind zu den normalen Buttons eigentlich nicht sehr verschieden. Der einzige Unterschied ist, daß sie entweder gedrückt sein können oder nicht. Der Status (gedrückt/nicht gedrückt) wird durch einfaches Klicken geändert. Toggle Buttons bilden die Basis für Radio Buttons und Check Buttons. So können die meisten Funktions-Aufrufe für Toggle Buttons auch für Radio Buttons und Check Buttons benutzt werden. Bei der Erstellung von Buttons gibt es wieder zwei Möglichkeiten, entweder mit oder ohne Label:

GtkWidget *gtk_toggle_button_new( void );
GtkWidget *gtk_toggle_button_new_with_label( gchar *label );

So sind die beiden Funktionen definiert. Beide arbeiten wie die Funktionen für die normalen Buttons. Um den Status eines Toggle Buttons herauszufinden (Radio und Check Buttons inbegriffen), können wir eine einfache GTK-Definition benutzen. Wenn ein Toggle/Radio/Check Button geändert wird, gibt er das Signal toggled zurück. Um dann den Status herauszufinden, braucht man nur einen Signalhandler (Callbacks siehe Teil II) zu setzen, der auf eine Funktion wie die folgende zeigt:

void toggle_button_callback( GtkWidget *widget, gpointer data )
{
 if( GTK_TOGGLE_BUTTON( widget )->active)
 {
/* Das wird ausgeführt wenn 'widget' (der Toggle Button) aktiviert ist */
 }
 else
 {
/* Und das wird gemacht wenn er nicht aktiviert ist */
 }
}

Jetzt kommen wir zu einer anderen Funktion für Toggle Buttons:

void gtk_toggle_button_set_active( GtkToggleButton *toggle_button, gint state );

Das kann benutzt werden, um den Status eines Toggle-Buttons zu setzen. Der erste Parameter ist dabei der Toggle Button, der geändert werden soll. Der zweite Parameter ist der Status, entweder TRUE oder FALSE. Wenn der Button durch dieses Signal geändert wird, wird der Button das clicked-Signal zurückgeben.

void gtk_toggle_button_toggled (GtkToggleButton *toggle_button);

Diese Funktion wechselt einfach den Status und gibt das toggled-Signal.

Check Buttons

Check Buttons sind eigentlich das Gleiche wie Toggle Buttons. Der einzige Unterschied ist ihr Aussehen. Während die anderen Buttons den Text in sich drin tragen, sind Check Buttons eine kleine Fläche, deren Text rechts daneben steht. Check Buttons werden meistens dazu verwendet, Optionen ein- und auszuschalten. Check Buttons können mit folgenden Funktionen erstellt werden (sind gleich mit den Funktionen normaler Buttons):

GtkWidget *gtk_check_button_new( void );
GtkWidget *gtk_check_button_new_with_label( gchar *label );

Der Rest ist genau das gleiche wie bei den Toggle Buttons.

Radio Buttons

Radio Buttons sind wie Check Buttons, jedoch liegt der Unterschied darin, daß Radio Buttons immer in Gruppen zusammengestellt werden, und nur ein Button einer Gruppe aktiviert sein kann. Radio Buttons werden mit einer der beiden Funktionen erstellt:

GtkWidget *gtk_radio_button_new( GSList *group );
GtkWidget *gtk_radio_button_new_with_label( GSList *group, gchar *label );

Sie werden bestimmt den Extra-Parameter bemerkt haben. Hier wird der Name der Gruppe eingetragen. Beim ersten Benutzen von gtk_radio_button_new() oder gtk_radio_button_new_with_label() sollte der erste Parameter NULL sein. Danach kann man eine Gruppe erstellen:

GSList *gtk_radio_button_group( GtkRadioButton *radio_button );

Diese Funktion muss bei jedem neu erstellten Radio Button neu aufgerufen werden, und zwar mit dem Vorgänger-Button als Parameter. Die Rückgabe von gtk_radio_button_group() muss dann an gtk_radio_button_new() oder gtk_radio_button_new_with_label() weitergegeben werden. Das untenstehende Beispiel wird mehr Klarheit schaffen :-). Aber diese Syntax sollte einiges erleichtern, sie wird auch im Beispiel verwendet:

button2 = gtk_radio_button_new_with_label(
 gtk_radio_button_group(GTK_RADIO_BUTTON (button1)),
 "button2");

Mit dem Aufruf folgender Funktion kann man bestimmen, welcher Button vorausgewählt sein soll:

Pro-Linux
Newsletter
Neue Nachrichten