====== Einfache GTK-Widgets ====== Im letzten Kapitel haben wir uns mit der Anordnung von Widgets (Elementen) beschäftigt. Doch, das was wir angeordnet haben wir wenig spektakulär, es war nur einfacher Text, sogenannte Labels. Nun möchten wir uns dieses Widget einmal genauer anschauen und auch ein neues kennen lernen. ===== Labels ===== Das ''GtkLabel'' gehört zu den einfachsten GTK-Widgets, die es überhaupt gibt. Doch lohnt es sich, es sich einmal genauer anzuschauen. #include int main(int argc, char** argv) { GtkWidget *window; GtkWidget *vbox; GtkWidget *label; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = gtk_vbox_new(FALSE, 10); gtk_container_add(GTK_CONTAINER(window), vbox); label = gtk_label_new("Dies ist ein ganz einfaches GTK-Programm mit einem Label"); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } Im letzten Kapitel haben wir keine eigene Variable für unser Label erstellt, da wir es nur in der ''gtk_box_pack_start'' Funktion erstellt haben. Der Nachteil ist, dass wir das ''GtkLabel'' danach nicht bearbeiten können. In diesem Beispiel haben wir mit GtkWidget *labelein neues ''GtkWidget'' erstellt mit dem Bezeichner label. Mit label = gtk_label_new("Dies ist ein ganz einfaches GTK-Programm mit einem Label"); füllen wir die bis jetzt leere Variable ''label''. ''gtk_label_new'' erwartet als Argument den Text, den das GtkLabel haben soll. Mit der schon bekannten Funktion gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); packen wir das Widget wieder in die ''GtkVBox''. ===== Buttons ===== Nun kann der Nutzer ein Label nur lesen. Möchten wir allerdings, dass der Benutzer unseres Programms auch selbst zur Tat schreiten kann, sind andere Widgets nötig. Ein ''GtkButton'' ist so Widget. In GTK können Buttons einfachen Text enthalten oder sogar kleine Icons. Mit dem folgenden Code wird unser Beispiel von oben um einen Button erweitert. Wenn ihr darauf klickt, so sollte sich das Fenster beenden! #include int main(int argc, char** argv) { GtkWidget *window; GtkWidget *vbox; GtkWidget *label; GtkWidget *button; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = gtk_vbox_new(FALSE, 10); gtk_container_add(GTK_CONTAINER(window), vbox); label = gtk_label_new("Dies ist ein ganz einfaches GTK-Programm mit einem Label"); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); button = gtk_button_new_with_label("Programm beenden."); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(button, "clicked", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } Wie gewünscht, erscheint ein "Knopf" unter dem Label:\\ {{:gui:gtk:kapitel1_03.jpg|}}((Hinweis: der Fenstertitel und das Fensterdesign können varieren))\\ Nach Klick auf diesen sollte sich das Fenster (und damit auch das Programm) von selbst schließen. Für den Button selber haben wir, wie für das Label auch, einen Zeiger auf ein ''GtkWidget'' reserviert. Mit button = gtk_button_new_with_label("Programm beenden."); erstellen wir dann einen Button mit einem Label, also ganz einfachen Text. Damit das Widget auch im Fenster zu sehen ist, platzieren wir es wie beim Label in die Box. Für das Schließen des Fensters ist folgende Funktion zuständig: g_signal_connect(button, "clicked", G_CALLBACK(gtk_main_quit), NULL); Mit dieser Zeile legen wir fest, dass beim Klicken auf den Button (dem //Event//), das Fenster geschlossen werden soll (''gtk_main_quit''). Genaueres zu solchen //Signalen// werdet ihr im nächsten Kapitel erfahren! ===== Ausblick ===== Unser schönes GTK Fenster hat nun endlich einen Inhalt bekommen. Doch zu einer vollständigen GUI fehlt noch ziemlich viel. Im nächsten Kapitel beschäftigen wir uns erst einmal mit Signalen, damit beispielsweise bei einem Klick auch etwas passiert.
**[[ gui:gtk:boxes|zurück]] || [[gui:gtk:start|hoch zur Startseite]] || [[ gui:gtk:signals |weiter]]**
====== ====== ---- [[http://forum.proggen.org/viewtopic.php?f=39&t=847|Diskussion]]