如何调整在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();
}
答
只需删除该行:
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
void gtk_box_pack_start(GtkBox * box, GtkWidget * child, gboolean expand, gboolean fill, guint padding);
...
扩大
TRUE,如果新的孩子给予分配箱额外的空间。 额外的空间将在所有使用 此选项
孩子之间划分...
你被明确要求,以不可调整大小与两个'gtk_widget_set_size_request()'和'gtk_window_set_resizable()'调用。将它们都删除。要将初始大小设置为GtkWindow,请使用'gtk_window_set_default_size()'。 – andlabs