Обновление контейнера Gtk при добавлении виджетов - PullRequest
2 голосов
/ 23 октября 2011

У меня есть некоторый код, который заполняет GtkVBox новыми виджетами из некоторых данных после первоначального создания пользовательского интерфейса.

Итак, есть код, который запускается позже и выглядит примерно так:

gchar* str = "something or other";
ascii_labels [i] = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (ascii_labels [i]), str);

ascii_event_boxes [i] = gtk_event_box_new ();

gtk_container_add (GTK_CONTAINER (ascii_event_boxes [i]),
                   ascii_labels [i]);

gtk_box_pack_start (GTK_BOX (ascii_box),
                    ascii_event_boxes [i],
                    FALSE, FALSE, 0);

в некотором цикле. Чуть позже у меня

gtk_widget_show_all (ascii_box);

, чтобы установить видимость. Кажется, это работает, потому что когда я запускаю результирующее приложение с помощью GtkParasite, я вижу, что виджеты правильно вложены в дерево виджетов, и они установлены как видимые.

К сожалению, они на самом деле не появляются в окне приложения! Причина, по которой я думаю, что мне не хватает какого-то вызова «обновите себя, пожалуйста», заключается в том, что если я переключаю видимость одного из этих виджетов из инструмента GtkParasite, все остальные виджеты, которые отсутствовали волшебным образом, появляются!

Может кто-нибудь сказать мне, что мне не хватает?

1 Ответ

1 голос
/ 24 октября 2011

Упаковка выглядит хорошо, но нам нужно знать, что содержит ascii_labels и как она определяется. Проблема не в видимости, поскольку gtk_widget_show_all позаботится об этом за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...