Как мне заставить работать код gtk? - PullRequest
0 голосов
/ 29 апреля 2010
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 GtkWindow может содержать только один виджет вовремя; он уже содержит виджет типа GtkVBox

В результате frame не отображается в окне.

Как сделать так, чтобы vbox и frame показывали?

Ответы [ 2 ]

1 голос
/ 29 апреля 2010

Поместите их оба в окружающий 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);
0 голосов
/ 29 апреля 2010

У вас есть ошибка, потому что каждый виджет может содержать только один виджет (вы хотите, чтобы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...