2017-06-17 17 views
0

GTK水平ボックスのエントリバーのサイズを変更できません。私はエラーがhboxにあるのか、それともサイズを変更できないエントリにあるのかわかりません。GTK +のエントリのサイズを変更する方法

私はこのgtk_widget_size_request機能を使用しましたが、機能しません。 これは私がhboxが理由だと思う理由です。

int main(int argc,char* argv[]) 
{ 
    GtkWidget *window; 
    GtkWidget *vbox; 

    GtkWidget *TreeView; 
    GtkWidget *title; 

    GtkWidget *hbox1; 
    GtkWidget *entry1; 
    GtkWidget *entry2; 
    GtkWidget *entry3; 

    GtkWidget *hbox2; 
    GtkWidget *btn1; 
    GtkWidget *btn2; 

    window=gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title(GTK_WINDOW(window),"hellow world"); 
    g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL); 
    gtk_widget_set_size_request(window,500,690); 
    gtk_container_set_border_width(GTK_CONTAINER(window), 15); 
    gtk_window_set_resizable(GTK_WINDOW(window), FALSE); 

    TreeView= gtk_tree_view_new(); 

    entry1= gtk_entry_new(); //this is the entry 
    entry2= gtk_entry_new(); 
    entry3= gtk_entry_new(); 

    btn1= gtk_button_new_with_label("add"); 
    btn2= gtk_button_new_with_label("remove"); 

    hbox1= gtk_hbox_new(0, 3); //this is the hbox 
    hbox2= gtk_hbox_new(0, 3); 

    gtk_box_pack_start(GTK_BOX(hbox1), entry1, FALSE, TRUE, 3); 
    gtk_box_pack_start(GTK_BOX(hbox1), entry2, FALSE, TRUE, 3); 
    gtk_box_pack_start(GTK_BOX(hbox1), entry3, FALSE, TRUE, 3); 

    gtk_box_pack_start(GTK_BOX(hbox2), btn1, FALSE, TRUE, 3); 
    gtk_box_pack_start(GTK_BOX(hbox2), btn2, FALSE, TRUE, 3); 

    vbox= gtk_vbox_new(0,3); 
    gtk_box_pack_start(GTK_BOX(vbox), TreeView, 1, 1, 0); 
    gtk_box_pack_start (GTK_BOX (vbox), hbox1,FALSE, TRUE, 3); 
    gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 3); 
    gtk_container_add(GTK_CONTAINER(window), vbox); 
    gtk_widget_show_all(window); 
    gtk_main(); 
} 
+0

あなたは明示的に 'gtk_widget_set_size_request()'と 'gtk_window_set_resizableの両方にサイズ変更が可能なことがないように求めている()' ... このオプション

使用しているすべての子供たちの間で均等に分割されますコール。両方を削除します。初期サイズをGtkWindowに設定するには、gtk_window_set_default_size()を使います。 – andlabs

答えて

0

は、単純にこの行削除:

gtk_window_set_resizable(GTK_WINDOW(window), FALSE);

をそして、これは動作します。現在持っているものの代わりにgtk_widget_set default_sizeを使用することもできます。

問題は、ウィンドウをサイズ変更できないように設定し、サイズ要求を設定すると互いに矛盾することです。

0

まず、gtk_window_set_resizable(GTK_WINDOW(window), FALSE);を削除して、GtkWindowのサイズを変更できるようにします。また、ウィンドウのサイズが変更されているときには、gtk_widget_set_size_requestの使用により500x690より小さくなりません。

次に、3つのエントリをすべて展開するか、1つまたは複数の組み合わせを展開するかを説明しませんでした。エントリを展開できるようにするには、FALSEではなく、拡張フラグをTRUEに設定する必要があります。今あなたが持っている:

gtk_box_pack_start(GTK_BOX(hbox1), entry1, FALSE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry2, FALSE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry3, FALSE, TRUE, 3); 

あなたはすべてのエントリが、展開しTRUEにフラグを設定する場合:

gtk_box_pack_start(GTK_BOX(hbox1), entry1, TRUE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry2, TRUE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry3, TRUE, TRUE, 3); 

あなたが拡大する最後のものだけをしたい場合は、最初の二つを残しますFALSEReference API

から TRUE

として最後の一つとして、 210

void gtk_box_pack_start(GtkBox * box、 GtkWidget *子、 gboolean expand、 gboolean fill、 guintパディング);

...

新しい子がボックスに割り当てられた余分なスペースを与えられるのであれば

TRUEを展開します。 余分なスペースは

関連する問題