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
的结果。
如何同时显示vbox
和frame
?
答案 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