LINUX.ORG.RU

Очень глупый вопрос по Gtk+


0

0

У меня два файла исходников. В одном из них создаётся главное окно и текстовый виджет внутри него.

GtkWidget *window1; ... window1 = create_window1();

Каким образом мне можно изменить текст в текстовом виджете из второго файла?

Пробовал писать:

extern GtkWidget *window1;

и потом обращаться по (window1->text1) не работет. =(

anonymous

Если это про glade, то нужно писать так:

Допустим, у нас есть callback на кнопку.

void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{
     GtkWidget *                                                                      window;

     window = lookup_widget (button, "window1");

     дальше делаем с window все, что хотим. Функция 
     lookup_widget есть в файле support.h
}

Если же мы хотим делать это на gtk, то, когда добавляем callback, нужно в вместо user_data написать window и делать так:

void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{
     GtkWidget *window = GTK_WINDOW (user_data);           

     дальше делаем с window все, что хотим. 
}

anonymous
()
Ответ на: комментарий от anonymous

Спасибо большое уже делаю первые успешные изменения, но мне так и не понятно что значит первый параметр у lookup_widget и как быть если я из простой функции хочу изменить (простой это значит что у неё в параметрах нет GtkButton *button).

anonymous
()
Ответ на: комментарий от anonymous

Если у нас есть widget, созданный glade, то с помощью функции lookup_widget можно получить другой widget по его имени. В момент создания интерфейса glade составляет таблицу соответствия widget'ов и имен, и присоединяет ее к самому верхнему виджету (toplevel). функция lookup_widget работает так: поднимается по дереву вложенности виджетов до самого верхнего и у него смотрит таблицу соответсвия.

То есть в качестве параметра можно указывать любой widget, созданный при помощи glade. А вот изменить что-то без параметра будет невозможно, хотя бы потому что нужно знать, что изменять. Но это не проблема, так как glade-приложение состоит из функций - callback'ов, у который первый параметр всегда это окно созданное glade.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.