Использование пользовательских виджетов с полянами / Gtkbuilder - PullRequest
10 голосов
/ 09 июня 2010

Я разрабатываю приложение с помощью Gtk и Glade. У меня сложилось впечатление, что обычной практикой является создание подкласса GtkWindow для вашего главного окна, но я застрял на том, как я буду создавать свой подкласс из определения GtkBuilder. Кто-нибудь знает как?

Ответы [ 3 ]

7 голосов
/ 10 июня 2010

Подклассы GtkWindow более распространены в различных языковых привязках GTK, чем в простом C. Вы не упомянули, какой язык вы использовали.

Тем не менее, я подкласс GtkWindow в C создаю содержимое окна в Glade, но не самого окна. В Glade 3 (IIRC) вы можете щелкнуть правой кнопкой мыши виджет в палитре и выбрать «Добавить виджет как верхний уровень», чтобы разместить виджет без верхнего уровня без контейнера.

Затем напишите код для вашего подкласса GtkWindow, назовем его MyAppWindow. Я не буду вдаваться в подробности этого ответа, поскольку в документации GObject есть множество примеров. В функции init (my_app_window_init()) загрузите файл Glade, используйте gtk_builder_get_object(), чтобы получить указатель на самый внешний виджет в файле Glade, и используйте gtk_container_add(), чтобы добавить его в создаваемое окно. Затем используйте gtk_builder_connect_signals() как обычно.

Вы должны вручную установить все свойства окна, так как вы не можете сделать это в Glade, но, кроме того, я обнаружил, что оно работает довольно хорошо.

1 голос
/ 09 июня 2010

Подкласс GtkWindow не является общепринятой практикой.

Я не думаю, что можно подклассировать окно верхнего уровня, созданное из определения gtkbuilder.

gtkbuilder должен знать о вашем виджете подкласса досоздание.

0 голосов
/ 25 августа 2010

Если вы действительно хотите создать свой собственный подкласс GtkWindow, ptomato хорошо описывает основные шаги.Также возможно создать плагины для glade, чтобы сделать ваши собственные виджеты доступными.Но это не очень просто, и, скорее всего, это не то, что вы хотите.

Большинство приложений используют только стандартные виджеты без разделения на подклассы.Затем, загружая файл glade с помощью gtkbuilder (или libglade), вам не нужно иметь специальный класс для вашего GUI (как в некоторых других инструментах RAD), вместо этого вы просто получаете набор объектов.API позволяет вам искать их по имени (и окно в основном только одно из них).Общий подход заключается в поиске всех виджетов, с которыми вы собираетесь взаимодействовать, и сохранении их в глобальных переменных при запуске программы.Или, если вам нужно несколько экземпляров окна, вы можете создать структуру для их хранения. Или вы можете просто искать виджеты каждый раз, когда они вам нужны.Обратите внимание, что набор объектов, которые вы получаете, является полностью динамическим.Например, вы можете перемещать виджеты между разными окнами так же, как если бы вы создали графический интерфейс программным способом.

...