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. |
|
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 :) |
|
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:
#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; }
|
|
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:
#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:
#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; }
|
|
kampar Temat założony przez niniejszego użytkownika |
» 2012-07-05 20:41:15 ok dzięki, o to mi chodziło. |
|
« 1 » |