如何在GTK +中调整条目的大小

时间:2017-06-17 22:29:26

标签: c++ resize gtk

我无法调整GTK水平框中的任何条目栏的大小。我不知道hbox或条目中的错误在哪里都不允许我调整它。

我使用了这个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();
}

2 个答案:

答案 0 :(得分:0)

只需删除此行:

gtk_window_set_resizable(GTK_WINDOW(window), FALSE);

这将有效。您也可以使用gtk_widget_set default_size代替您目前拥有的内容。

问题是将窗口设置为不可调整大小并设置大小请求相互矛盾。

答案 1 :(得分:0)

如上所述,首先,删除gtk_window_set_resizable(GTK_WINDOW(window), FALSE);以允许GtkWindow调整大小。另请注意,由于使用gtk_widget_set_size_request,您的窗口在调整大小时不会小于500x690。

然后,您没有解释是否要扩展所有三个条目或只是一个或哪个组合。要允许条目展开,您需要将展开标记设置为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 *孩子,                       gboolean expand,                       gboolean fill,                       guint padding);

     

...

     

展开

     

如果要为新孩子分配给盒子的额外空间,则为TRUE。   额外的空间将在所有使用的孩子之间平均分配   这个选项

     

...