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

[GTK+] Rozmiar pola tekstowego

Ostatnio zmodyfikowano 2012-07-05 20:41
Autor Wiadomość
kampar
Temat założony przez niniejszego użytkownika
[GTK+] Rozmiar pola tekstowego
» 2012-07-03 20:37:46
Witam, czy jest jakaś możliwość ustalenia długości pola tekstowego (GtkEntry)?
Chciałbym mieć 3 pola obok siebie, tyle że 2 pierwsze by były małe, a trzeci byłby długi. Np. dwa pierwsze pola zajmują 1/4 okna, a resztę zajmuje 3 pole. Próbowałem zagnieżdżać w sobie kontenery GtkHBox, ale nie dawało to dobrych rezultatów i nie wiem czy jest sens iść w tym kierunku.
P-59493
m4tx
» 2012-07-03 20:41:49
Chciałbym mieć 3 pola obok siebie, tyle że 2 pierwsze by były małe, a trzeci byłby długi. Np. dwa pierwsze pola zajmują 1/4 okna, a resztę zajmuje 3 pole. Próbowałem zagnieżdżać w sobie kontenery GtkHBox
Użyj GtkTable :)
P-59494
kampar
Temat założony przez niniejszego użytkownika
» 2012-07-03 21:04:38
Tak już wygląda to lepiej, są 2 mniejsze pola i jedno dłuższe, jednak te pola są dalej za długie. Więc czy jest możliwość ich skrócenia, albo czy można ustalić stały rozmiar okna, tak aby się nie wydłużało zmieniając parametry w funkcji
gtk_table_attach_defaults( GTK_TABLE( tabela ), entry3, 2, 8, 0, 1) ?


Kod:
C/C++
#include <gtk/gtk.h>

int main( int argc, char * argv[] )
{
    GtkWidget * okno;
    GtkWidget * entry;
    GtkWidget * entry2;
    GtkWidget * entry3;
    GtkWidget * tabela;
   
    gtk_init( & argc, & argv );
   
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_title( GTK_WINDOW( okno ), "Kurs GTK+" );
    gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 100, 100 );
   
   
    gtk_container_set_border_width( GTK_CONTAINER( okno ), 5 );
   
    tabela = gtk_table_new( 1, 8, TRUE );
    gtk_table_set_row_spacings( GTK_TABLE( tabela ), 2 );
    gtk_table_set_col_spacings( GTK_TABLE( tabela ), 2 );
   
   
    entry = gtk_entry_new();
    entry2 = gtk_entry_new();
    entry3 = gtk_entry_new();
   
   
    gtk_table_attach_defaults( GTK_TABLE( tabela ), entry, 0, 1, 0, 1 );
    gtk_table_attach_defaults( GTK_TABLE( tabela ), entry2, 1, 2, 0, 1 );
    gtk_table_attach_defaults( GTK_TABLE( tabela ), entry3, 2, 8, 0, 1 );
   
   
    gtk_container_add( GTK_CONTAINER( okno ), tabela );
   
    g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL );
   
    gtk_widget_show_all( okno );
   
    gtk_main();
   
    return 0;
}
P-59495
Badman
» 2012-07-05 10:54:22
Możesz każdej kontrolce ustawić na sztywno rozmiar jężeli znajduje się GtkFixed, wtedy jej rozmiar i pozycja nie zmieni się nigdy. Jednak sądzę, że lepiej kombinować z wyrównaniami:

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

int main( int argc, char * argv[] )
{
    GtkWidget * okno;
    GtkWidget * vbox, * hbox;
    GtkWidget * entry;
    GtkWidget * entry2;
    GtkWidget * entry3;
    GtkWidget * tabela;
    GtkWidget * wyrownanie;
    GtkWidget * fixed;
    GtkWidget * entry4, * entry5, * entry6;
   
    gtk_init( & argc, & argv );
   
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_title( GTK_WINDOW( okno ), "Kurs GTK+" );
    gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 600, 100 );
   
   
    gtk_container_set_border_width( GTK_CONTAINER( okno ), 5 );
   
    vbox = gtk_vbox_new( TRUE, 0 );
    gtk_container_add( GTK_CONTAINER( okno ), vbox );
   
   
    tabela = gtk_table_new( 1, 3, FALSE );
    gtk_table_set_row_spacings( GTK_TABLE( tabela ), 2 );
    gtk_table_set_col_spacings( GTK_TABLE( tabela ), 2 );
   
   
    entry = gtk_entry_new();
    entry2 = gtk_entry_new();
    entry3 = gtk_entry_new();
   
    wyrownanie = gtk_alignment_new( 0.5, 0.5, 0, 1 );
    gtk_container_add( GTK_CONTAINER( wyrownanie ), entry );
    gtk_table_attach( GTK_TABLE( tabela ), wyrownanie,
    0, 1, 0, 1,
    0, GTK_EXPAND | GTK_FILL,
    0, 0 );
   
    wyrownanie = gtk_alignment_new( 0.5, 0.5, 0, 1 );
    gtk_container_add( GTK_CONTAINER( wyrownanie ), entry2 );
    gtk_table_attach( GTK_TABLE( tabela ), wyrownanie,
    1, 2, 0, 1,
    0, GTK_FILL | GTK_EXPAND,
    0, 0 );
   
    wyrownanie = gtk_alignment_new( 0, 0.50, 0.7, 1 );
    gtk_container_add( GTK_CONTAINER( wyrownanie ), entry3 );
    gtk_table_attach( GTK_TABLE( tabela ), wyrownanie,
    2, 3, 0, 1,
    GTK_EXPAND | GTK_FILL, GTK_FILL | GTK_EXPAND,
    0, 0 );
   
    gtk_box_pack_start( GTK_BOX( vbox ), tabela, TRUE, TRUE, 0 );
   
   
    entry4 = gtk_entry_new();
    entry5 = gtk_entry_new();
    entry6 = gtk_entry_new();
   
    fixed = gtk_fixed_new();
    gtk_fixed_put( GTK_FIXED( fixed ), entry4, 0, 0 );
    gtk_widget_set_size_request( entry4, 80, - 1 );
    gtk_fixed_put( GTK_FIXED( fixed ), entry5, 85, 0 );
    gtk_widget_set_size_request( entry5, 80, - 1 );
    gtk_fixed_put( GTK_FIXED( fixed ), entry6, 175, 0 );
    gtk_widget_set_size_request( entry6, 160, - 1 );
   
    gtk_box_pack_start( GTK_BOX( vbox ), fixed, TRUE, TRUE, 0 );
   
   
    g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL );
   
    gtk_widget_show_all( okno );
   
    gtk_main();
   
    return 0;
}


Pobawiłem się i zdaje mi się, że to najprostszy sposób:
C/C++
#include <gtk/gtk.h>

int main( int argc, char * argv[] )
{
    GtkWidget * okno;
    GtkWidget * entry[ 3 ];
    GtkWidget * tabela;
    GtkWidget * wyrownanie;
    gint i;
    guint tablica_szerokosci[] = { 80, 80, 160 };
   
   
    gtk_init( & argc, & argv );
   
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 600, 100 );
   
    wyrownanie = gtk_alignment_new( 0, 0.5, 0, 1 );
    gtk_container_add( GTK_CONTAINER( okno ), wyrownanie );
   
    tabela = gtk_table_new( 1, 3, FALSE );
    gtk_table_set_row_spacings( GTK_TABLE( tabela ), 2 );
    gtk_table_set_col_spacings( GTK_TABLE( tabela ), 2 );
   
    for( i = 0; i < 3; i++ )
    {
        entry[ i ] = gtk_entry_new();
        gtk_widget_set_size_request( entry[ i ], tablica_szerokosci[ i ], - 1 );
        gtk_table_attach( GTK_TABLE( tabela ), entry[ i ],
        i, i + 1, 0, 1,
        0, GTK_EXPAND | GTK_FILL,
        0, 0 );
    }
   
    gtk_container_add( GTK_CONTAINER( wyrownanie ), tabela );
   
    g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL );
   
    gtk_widget_show_all( okno );
   
    gtk_main();
   
    return 0;
}
P-59550
kampar
Temat założony przez niniejszego użytkownika
» 2012-07-05 20:41:15
ok dzięki, o to mi chodziło.
P-59560
« 1 »
  Strona 1 z 1