







|

Checkbuttons und Radiobuttons funktionieren genauso wie Toogled Buttons und
verwenden auch die selben Funktionen. Nur eben bei der Erzeugen werden andere Funktionen aufgerufen. Hier die
Funktionen wie sie Check Buttons
erzeugen können:
GtkWidget *gtk_check_button_new(void);
...oder mit Label...
GtkWidget *gtk_check_button_new_with_label(gchar *label);
Hierzu das selben Programmbeispiel wie im Kapitel zuvor, den Toggled Buttons,
nur eben mit Checkbuttons:
/*Download:gtkchk.c*/
#include <gtk/gtk.h>
GtkWidget *button1, *button2, *button3, *button_quit;
void ende_cb(GtkObject *object)
{
g_print("\n\nZustand der Toggled Buttons zum Abschluss : \n");
if(GTK_TOGGLE_BUTTON(button1)->active)
g_print("Knopf 1 war aktiviert (toggled)\n");
else
g_print("Knopf 1 war deaktiviert (not toggled)\n");
if(GTK_TOGGLE_BUTTON(button2)->active)
g_print("Knopf 2 war aktiviert (toggled)\n");
else
g_print("Knopf 2 war deaktiviert (not toggled)\n");
if(GTK_TOGGLE_BUTTON(button3)->active)
g_print("Knopf 3 war aktiviert (toggled)\n");
else
g_print("Knopf 3 war deaktiviert (not toggled)\n");
gtk_main_quit();
}
void check_toggle_cb(GtkWidget *widget, gpointer data)
{
if(GTK_TOGGLE_BUTTON(widget)->active)
g_print("%s aktiviert (toggled)\n",(char *)data);
else
g_print("%s deaktiviert (not toggled)\n",(char *)data);
}
int main(int argc, char **argv)
{
GtkWidget *fenster;
GtkWidget *box;
/*Gtk initialisieren*/
gtk_init(&argc, &argv);
/*Ein neues Fenster erstellen*/
fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*Buttons erstellen*/
button1 = gtk_check_button_new_with_label("Knopf 1");
button2 = gtk_check_button_new_with_label("Knopf 2");
button3 = gtk_check_button_new_with_label("Knopf 3");
button_quit = gtk_button_new_with_label("Ende");
/*Neue Box erstellen*/
box = gtk_vbox_new(FALSE,0);
/*Signale registrieren*/
gtk_signal_connect_object(GTK_OBJECT(button_quit), "clicked",
GTK_SIGNAL_FUNC(ende_cb), GTK_OBJECT(fenster));
gtk_signal_connect(GTK_OBJECT(fenster), "destroy",
GTK_SIGNAL_FUNC(ende_cb), NULL);
gtk_signal_connect(GTK_OBJECT(button1), "clicked",
GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 1");
gtk_signal_connect(GTK_OBJECT(button2), "clicked",
GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 2");
gtk_signal_connect(GTK_OBJECT(button3), "clicked",
GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 3");
/*Fenstertitel*/
gtk_window_set_title(GTK_WINDOW(fenster), "Toggled Buttons");
/*Fensterposition*/
gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(fenster),25);
/*Nun alles rein in die Box....*/
gtk_box_pack_start(GTK_BOX(box), button1, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button2, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button3, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button_quit, FALSE, FALSE, 20);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button1),TRUE);
gtk_container_add(GTK_CONTAINER(fenster),box);
/*Zeigs uns.....*/
gtk_widget_show_all(fenster);
gtk_main();
return 0;
}
|
Und so könnte es aussehen:
Sie sehen das wir nur die Funktionen zum Erzeugen der Buttons geändert haben.
Radiobuttons
Ähnlich läuft dies auch mit Radio-Buttons ab. Hier die beiden Funktionen
mit denen es möglich ist, Radio-Buttons zu erzeugen:
GtkWidget *gtk_Radio_button_new(GSList *group);
...oder mit Label...
GtkWidget *gtk_check_button_new_with_label(GSList *group, gchar *label);
Natürlich läuft dies bei Radio-Buttons etwas anders ab.
Ein Radio-Button ist auch ein Teil einer Gruppe von Knöpfen,
wovon immer nur einer ausgewählt werden kann. Das heißt wenn Knopf 1
ausgewählt war und sie wählen nun Knopf 2, wird Knopf 1 deaktiviert.
Daher ist es unbedingt nötig nach dem Erzeugen einer neuen Gruppe
von Radion-Buttons (welche mit NULL initialisiert werden müssen),
die Funktion:
GSList *gtk_radio_button_group(GtkRadioButton *radio_button);
aufzurufen, da sich die Liste der Radio-Buttons ja geändert hat.
Ansonsten gibt es keine Unterschiede zu den Toggled und Check Buttons.
Standardmäßig ist immer der erste Radio-Button aktiviert. Aber ändern
können sie dies, wie schon bei den Toggled Buttons.
Sehen wir uns doch einfach ein Beispiel dazu an:
/*Download:gtkrd.c*/
#include <gtk/gtk.h>
GtkWidget *button1, *button2, *button3, *button_quit;
void ende_cb(GtkObject *object)
{
g_print("\n\nZustand der Toggled Buttons zum Abschluss : \n");
if(GTK_TOGGLE_BUTTON(button1)->active)
g_print("Knopf 1 war aktiviert (toggled)\n");
else
g_print("Knopf 1 war deaktiviert (not toggled)\n");
if(GTK_TOGGLE_BUTTON(button2)->active)
g_print("Knopf 2 war aktiviert (toggled)\n");
else
g_print("Knopf 2 war deaktiviert (not toggled)\n");
if(GTK_TOGGLE_BUTTON(button3)->active)
g_print("Knopf 3 war aktiviert (toggled)\n");
else
g_print("Knopf 3 war deaktiviert (not toggled)\n");
gtk_main_quit();
}
void check_toggle_cb(GtkWidget *widget, gpointer data)
{
if(GTK_TOGGLE_BUTTON(widget)->active)
g_print("%s aktiviert (toggled)\n",(char *)data);
else
g_print("%s deaktiviert (not toggled)\n",(char *)data);
}
int main(int argc, char **argv)
{
GtkWidget *fenster;
GtkWidget *box;
GSList *r_group = NULL;
/*Gtk initialisieren*/
gtk_init(&argc, &argv);
/*Ein neues Fenster erstellen*/
fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*Buttons erstellen*/
button1 = gtk_radio_button_new_with_label(r_group,"Radio 1");
r_group = gtk_radio_button_group(GTK_RADIO_BUTTON(button1));
button2 = gtk_radio_button_new_with_label(r_group,"Radio 2");
r_group = gtk_radio_button_group(GTK_RADIO_BUTTON(button2));
button3 = gtk_radio_button_new_with_label(r_group,"Radio 3");
r_group = gtk_radio_button_group(GTK_RADIO_BUTTON(button3));
button_quit = gtk_button_new_with_label("Ende");
/*Neue Box erstellen*/
box = gtk_vbox_new(FALSE,0);
/*Signale registrieren*/
gtk_signal_connect_object(GTK_OBJECT(button_quit), "clicked",
GTK_SIGNAL_FUNC(ende_cb), GTK_OBJECT(fenster));
gtk_signal_connect(GTK_OBJECT(fenster), "destroy",
GTK_SIGNAL_FUNC(ende_cb), NULL);
gtk_signal_connect(GTK_OBJECT(button1), "clicked",
GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 1");
gtk_signal_connect(GTK_OBJECT(button2), "clicked",
GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 2");
gtk_signal_connect(GTK_OBJECT(button3), "clicked",
GTK_SIGNAL_FUNC(check_toggle_cb),"Knopf 3");
/*Fenstertitel*/
gtk_window_set_title(GTK_WINDOW(fenster), "Radio Buttons");
/*Fensterposition*/
gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(fenster),25);
/*Nun alles rein in die Box....*/
gtk_box_pack_start(GTK_BOX(box), button1, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button2, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button3, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button_quit, FALSE, FALSE, 20);
/*Button 2 aktivieren*/
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button2),TRUE);
gtk_container_add(GTK_CONTAINER(fenster),box);
/*Zeigs uns.....*/
gtk_widget_show_all(fenster);
gtk_main();
return 0;
}
|
Und so könnte es aussehen:
Wollen sie nachträglich einen Radio-Button zur Gruppe hinzuordnen, verwenden
sie die Funktion:
void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);

© 2001,2002 Jürgen Wolf
|