如何调整在GTK +

问题描述:

一个条目我不能调整在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

只需删除该行:

gtk_window_set_resizable(GTK_WINDOW(window), FALSE);

,这将正常工作。您也可以使用gtk_widget_set default_size而不是您目前拥有的。

的问题是,设定窗口为不可调整大小和设定尺寸请求相互矛盾。

至于说,首先,去除gtk_window_set_resizable(GTK_WINDOW(window), FALSE);允许的GtkWindow来调整。另请注意,由于使用了gtk_widget_set_size_request,您的窗口在调整大小时不会小于500x690。

然后,你没有,如果你希望所有的3项扩展或只是一个或组合解释。要允许条目展开,您需要将展开标志设置为TRUE而不是FALSE。现在您有:

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); 

如果你想只有最后一次扩大,然后离开前两作为FALSE,最后一个为TRUE

Reference API

void gtk_box_pack_start(GtkBox * box, GtkWidget * child, gboolean expand, gboolean fill, guint padding);

...

扩大

TRUE,如果新的孩子给予分配箱额外的空间。 额外的空间将在所有使用 此选项

孩子之间划分...