Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[GTK+] GtkVBox Kolejność widżetów

Ostatnio zmodyfikowano 2016-04-12 19:35
Autor Wiadomość
quick.bent452
Temat założony przez niniejszego użytkownika
[GTK+] GtkVBox Kolejność widżetów
» 2016-04-11 20:29:03
Cześć :)

Staram się nauczyć programowania GUI za pomocą GTK. Piszę w Code::Blocks na Windows.
Napisałem taki program:
C/C++
#include <gtk/gtk.h>

int main( int argc, char * argv[] ) {
    GtkWidget * okno; // tworzy okno
    GtkWidget * box1_0; // tworzy kontener pionowy
    GtkWidget * guzik; // tworzy guzik na gorze
    GtkWidget * box1_1; // tworzy tabele na dole
    GtkWidget * przycisk[ 4 ]; // zawartosc nowe1_2
   
    gtk_init( & argc, & argv );
   
    // tworzenie ³adnego okienka
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 250, 180 );
    gtk_window_set_title( GTK_WINDOW( okno ), ":-)" );
    gtk_container_set_border_width( GTK_CONTAINER( okno ), 5 );
   
    // tworzenie konteneru pionowego z dwoma elementami
    box1_0 = gtk_vbox_new( FALSE, 1 );
    gtk_container_add( GTK_CONTAINER( okno ), box1_0 );
   
   
    //tworzy kontener dolny
    box1_1 = gtk_table_new( 2, 2, TRUE );
    gtk_table_set_row_spacings( GTK_TABLE( box1_1 ), 2 );
    gtk_table_set_col_spacings( GTK_TABLE( box1_1 ), 2 );
   
    // tworzy tabliczke guzikow
    przycisk[ 0 ] = gtk_button_new_with_label( "1" );
    przycisk[ 1 ] = gtk_button_new_with_label( "2" );
    przycisk[ 2 ] = gtk_button_new_with_label( "3" );
    przycisk[ 3 ] = gtk_button_new_with_label( "4" );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 0 ], 0, 1, 0, 1 );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 1 ], 1, 2, 0, 1 );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 2 ], 0, 1, 1, 2 );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 3 ], 1, 2, 1, 2 );
    gtk_container_add( GTK_CONTAINER( box1_0 ), box1_1 );
   
    //tworzy guzik
    guzik = gtk_button_new_with_label( "a kuku" );
   
    // pakowanie do konteneru pionowego guzika i tabelki
    gtk_box_pack_start( GTK_BOX( box1_0 ), box1_1, TRUE, TRUE, 0 );
    gtk_box_pack_start( GTK_BOX( box1_0 ), guzik, TRUE, TRUE, 0 );
    // zabicie procesu
    g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL );
    // wyœwietlenie zawartosci ca³ego okna
    gtk_widget_show_all( okno );
    gtk_main();
    return 0;
}

W programie staram się umieścić w kontenerze GtkVBox dwa widgety: jeden przycisk oraz kontener GtkTable z czterema przyciskami.
To z czym mam problem to kolejność widgetów w oknie programu. To co otrzymuje po odpaleniu kodu to tablica na górze i pojedynczy przycisk na dole. Chciałbym mieć odwrotną kolejność: na górze pojedynczy przycisk pod spodem tabelka.
Wydawało mi się, że wystarczy zamienić kolejność linijek:
C/C++
gtk_box_pack_start( GTK_BOX( box1_0 ), box1_1, TRUE, TRUE, 0 );
gtk_box_pack_start( GTK_BOX( box1_0 ), guzik, TRUE, TRUE, 0 );
To niestety nie pomaga. W jaki sposób mógłbym nadzorować kolejność widgetów?
P-147192
Kaikso
» 2016-04-12 09:57:52
P-147198
quick.bent452
Temat założony przez niniejszego użytkownika
» 2016-04-12 19:35:35
Rozwiązałem swój problem. Dzięki Kaikso za linka.
Wygląda na to, że wystarczyło przerzucić funkcję gtk_box_pack_start() przed blok tworzenia tablicy z guzikami. A konkretniej przed funkcję gtk_container_add.
Poniżej wrzucam programik, może komuś się przyda :)

C/C++
#include <gtk/gtk.h>
#include<string>


int main( int argc, char * argv[] ) {
    GtkWidget * okno; // tworzy okno
    GtkWidget * box1_0; // tworzy kontener pionowy
    GtkWidget * guzik; // tworzy guzik na gorze
    GtkWidget * box1_1; // tworzy tabele na dole
    GtkWidget * przycisk[ 4 ]; // zawartosc nowe1_2
   
    gtk_init( & argc, & argv );
   
    // tworzenie ³adnego okienka
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 250, 180 );
    gtk_window_set_title( GTK_WINDOW( okno ), "kajkujatoj" );
    gtk_container_set_border_width( GTK_CONTAINER( okno ), 5 );
   
    // tworzenie konteneru pionowego z dwoma elementami
    box1_0 = gtk_vbox_new( FALSE, 1 );
    gtk_container_add( GTK_CONTAINER( okno ), box1_0 );
   
   
    //tworzy guzik
    guzik = gtk_button_new_with_label( "cyfra" );
   
    //tworzy kontener dolny
    box1_1 = gtk_table_new( 2, 2, TRUE );
    gtk_table_set_row_spacings( GTK_TABLE( box1_1 ), 2 );
    gtk_table_set_col_spacings( GTK_TABLE( box1_1 ), 2 );
   
    // zapakowanie guzika do kontenera
    gtk_box_pack_start( GTK_BOX( box1_0 ), guzik, TRUE, TRUE, 0 );
   
    // tworzy tabliczke guzikow
    przycisk[ 0 ] = gtk_button_new_with_label( "1" );
    przycisk[ 1 ] = gtk_button_new_with_label( "2" );
    przycisk[ 2 ] = gtk_button_new_with_label( "3" );
    przycisk[ 3 ] = gtk_button_new_with_label( "4" );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 0 ], 0, 1, 0, 1 );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 1 ], 1, 2, 0, 1 );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 2 ], 0, 1, 1, 2 );
    gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 3 ], 1, 2, 1, 2 );
    gtk_container_add( GTK_CONTAINER( box1_0 ), box1_1 );
   
   
   
    // pakowanie do konteneru pionowego guzika i tabelki
   
    //  gtk_box_pack_start(GTK_BOX(box1_0),box1_1,TRUE,TRUE,0);
   
    // zabicie procesu
    g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL );
    // wyœwietlenie zawartosci ca³ego okna
    gtk_widget_show_all( okno );
    gtk_main();
    return 0;
}
P-147213
« 1 »
  Strona 1 z 1