Login
Newsletter
Werbung

So, 14. November 1999, 00:00

GTK Workshop: Teil III

Hier ein Beispiel zu obigem Test (Sie können einen Tarball mit allen Beispielen dieses Teils herunterladen):

#include <gtk/gtk.h>
void delete_event( GtkWidget *widget, GdkEvent event, gpointer data )
{
 gtk_main_quit();
}
int main( int argc, char *argv[] )
{
 /* Hier werden Variablen für die Widgets deklariert */
 GtkWidget *mainbox;
 GtkWidget *buttonbox;
 GtkWidget *quitbutton;
 GtkWidget *examplebuttons;
 GtkWidget *window;
 GtkWidget *trenner;
 gtk_init( &argc, &argv );
/* eine vertikale PackBox wird erstellt. Die Widgets dürfen ungleiche
 Größen haben. Zwischen den Widgets ist jeweils 2 Pixel Platz */
 mainbox = gtk_vbox_new( FALSE, 2 );
 /* Das gleiche wie oben. Hier ist es jedoch eine horizontale PackBox */
 buttonbox = gtk_hbox_new( FALSE, 2 );
 quitbutton = gtk_button_new_with_label("Quit");
 /* Hier lernen wir ein neues Widget kennen. Den Separator (Trenner) */
 trenner = gtk_hseparator_new();
 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
 /* Um die Widgets wird ein 10 Pixel Rahmen dargestellt */
 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
 /* Der Titel des Fensters wird auf "PackBox Beispiel" geändert */
 gtk_window_set_title( GTK_WINDOW( window ), "PackBox Beispiel");
 /* Der erste Button wird erstellt */
 examplebuttons = gtk_button_new_with_label( "Breite unverändert" );
 /* Er wird in unsere PackBox "buttonbox" gepackt. Dieser Button wird
 seine Breite nicht verändern. */
 gtk_box_pack_start( GTK_BOX( buttonbox ), examplebuttons, FALSE, TRUE, 0);
 /* Der Button ist fertig, er wird angezeigt */
 gtk_widget_show( examplebuttons );
 /* Der obere Button wird nicht gebraucht, darum nehmen wir für den
 nächsten Button wieder die gleiche Variable */
 examplebuttons = gtk_button_new_with_label( "Button nimmt übrigen Platz ein" );
 /* Dieser Button wird seine Größe der Box Anpassen, wenn das
 Fenster vergrößert wird */
 gtk_box_pack_start( GTK_BOX( buttonbox ), examplebuttons, TRUE, TRUE, 0);
 gtk_widget_show( examplebuttons );
 examplebuttons = gtk_button_new_with_label( "Breite unverändert" );
 gtk_box_pack_start( GTK_BOX( buttonbox ), examplebuttons, FALSE, TRUE, 0);
 gtk_widget_show( examplebuttons );
 /* Die Buttonbox (die wir eben mit 3 Buttons vollgepackt haben)
 wird jetzt in unsere Vertikale Haupt-PackBox gepackt. Wir können
 PackBoxes verschachteln, soviel wir wollen */
 gtk_box_pack_start( GTK_BOX( mainbox ), buttonbox, TRUE, TRUE, 0 );
 /* Darunter wird unser neues Widget, der Separator, gepackt. Über und
 unter dem Separator werden 10 Pixel freigelassen */
 gtk_box_pack_start( GTK_BOX( mainbox ), trenner, FALSE, TRUE, 10 );
 /* Der Quit-Knopf muss auch noch rein */
 gtk_box_pack_start( GTK_BOX( mainbox ), quitbutton, FALSE, TRUE, 0 );
 /* Nun wird unsere Haupt-PackBox "mainbox" in das Fenster eingebaut */
 gtk_container_add( GTK_CONTAINER( window ), mainbox );
 /* Nützliche Signal-Verknüpfungen, zum Beenden des Programms.
 Das ist ja bekannt */
 gtk_signal_connect_object( GTK_OBJECT( quitbutton ), "clicked",
 GTK_SIGNAL_FUNC( gtk_main_quit ),
 GTK_OBJECT( window ) );
 gtk_signal_connect( GTK_OBJECT( window ), "delete_event",
 GTK_SIGNAL_FUNC( delete_event ), NULL );
 gtk_signal_connect_object(GTK_OBJECT( window ), "destroy",
 GTK_SIGNAL_FUNC( gtk_main_quit ),
 GTK_OBJECT( window ) );
 /* Alle Widgets, die auf dem Fenster befestigt sind,
 werden angezeigt */
 gtk_widget_show_all( window );
 /* Kontrolle wird zu GTK übergeben */
 gtk_main();
 return 0;
}

Nun kompilieren Sie das Programm. Noch ein Tipp am Rande: die Executables neigen dazu, sehr groß zu werden. Darum spart es Platz, wenn Sie nach der Kompilierung ein strip executable an der Shell machen. Wenn alles geklappt hat und Sie das Programm starten, müsste es in etwa so aussehen:

Wenn Sie nun das Fenster vergrößern, werden Sie bemerken, dass die Buttons mit der Aufschrift »Breite unverändert« ihre Breite beibehalten. Und genau das macht der Quit-Button mit seiner Höhe. Warum das so ist, müssten Sie eigentlich aus dem obigem Text wissen. Sonst empfehle ich Ihnen, es nochmal zu lesen!

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung