如何使gtk代码工作?

时间:2010-04-29 14:36:11

标签: c windows gtk

vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
...
frame = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), frame);
...

以上代码将生成以下警告:

  

Gtk-WARNING **:试图添加一个   类型为GtkFixed的小部件   GtkWindow,但作为GtkBin的子类a   GtkWindow只能包含一个小部件   一次;它已经包含了一个   GtkVBox类型的小部件

窗口中未显示frame的结果。

如何同时显示vboxframe

2 个答案:

答案 0 :(得分:1)

将它们放在周围的vbox中(如果你想垂直堆叠它们),那就是:

parentVbox = gtk_vbox_new(FALSE, 0);

vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(parentVbox), vbox, TRUE, TRUE, 0);
...
frame = gtk_fixed_new();
gtk_box_pack_start(GTK_BOX(parentVbox), frame, TRUE, 0);
...
gtk_container_add(GTK_CONTAINER(window), parentVbox);

答案 1 :(得分:0)

您遇到的错误是因为每个小部件只能包含一个小部件(您希望窗口包含vbox和框架),即使包含的小部件可能是包含其他几个小部件的复杂小部件。

要将小部件放在框中,您必须使用gtk_box_pack_start()。 Gnome参考手册链接: http://library.gnome.org/devel/gtk/stable/GtkBox.html#gtk-box-pack-start

vbox = gtk_vbox_new(FALSE, 0);
frame = gtk_fixed_new();
gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); //the frame goes inside vbox
...
gtk_container_add(GTK_CONTAINER(window), vbox); //the vbox is contained by window