Привет.
В глейд сделал интерфейс - окно, в нем кнопка и ноутбук, в ноутбуке метка.
http://img146.imageshack.us.local/my.php?image=screenshot1mg5.png вот скрин.
Пытаюсь реализовать такую логику: при нажитии на кнопку должен создаваться новый таб у ноутбука, с точно такими же виджетами но другими данными. Например на первом табе будет метка с надписью 1, на втором 2 и тд.
Чтобы это сделать нужно создать дочерний виджет и добавить его к ноутбуку. Я пытаюсь использовать уже созданный макет интерфейса.
Для этого я открываю хмл файл интерфейса и загружаю vbox2(см скриншот).
Тут появляется две проблемы:
1) когда я запускаю код, получаю месседж от гтк
(notebook:8502): Gtk-WARNING **: Can't set a parent on widget which has a parent
Т.е. гтк говорит что пытаюсь сделать ноутбук родителем конейнера, когда у него уже есть родитель. Но что делать? Если я хочу получить точно такой-же таб?
2) после загрузки контейнера vbox2, как мне получить доступ к label которая находится внутри него, чтобы изменить ее данные(текст)?
[solved]Gtk/Glade повторное использование объектов из xml файла.
Модератор: Модераторы разделов
-
- Сообщения: 149
- ОС: SuSE Linux
Re: [solved]Gtk/Glade повторное использование объектов из xml файла.
1) Что-то не то создаете, покажите код
2) Можно получить виджет по названию glade_xml_get_widget
или получить содержимое контейнера
gtk_container_get_children
2) Можно получить виджет по названию glade_xml_get_widget
или получить содержимое контейнера
gtk_container_get_children
-
- Сообщения: 2
Re: [solved]Gtk/Glade повторное использование объектов из xml файла.
Вот код. По пункту спасибо за наводку, буду разбираться.
Код: Выделить всё
#include <gtk/gtk.h>
void
on_window_destroy (GtkObject *object, gpointer user_data)
{
gtk_main_quit();
}
void on_button_clicked(GtkButton *button, GtkNotebook *notebook)
{
gint response;
GtkWidget *page;
GtkBuilder *builder;
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "notebook.xml", NULL); //вот здесь я хочу вытащить контейнер vbox2
page = GTK_WIDGET (gtk_builder_get_object (builder, "vbox2"));
g_object_unref (G_OBJECT (builder));
response = gtk_notebook_append_page(notebook,page,NULL); //чтобы использовать его как содержание нового таба, т.е. дочерний обьект
g_print ("response %d \n", response);
}
int
main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
GtkNotebook *notebook;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "notebook.xml", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
notebook = GTK_NOTEBOOK (gtk_builder_get_object (builder, "notebook"));
gtk_builder_connect_signals (builder, notebook);
g_object_unref (G_OBJECT (builder));
gtk_widget_show (window);
gtk_main ();
return 0;
}