Использование пользовательских виджетов с GLADE / GTKBUILDER

StackOverflow https://stackoverflow.com/questions/3002243

  •  25-09-2019
  •  | 
  •  

Вопрос

Я разрабатываю приложение с GTK и Glade. Мое впечатление - это общая практика для создания подкласса GTKWindow для вашего главного окна, но я застрял на том, как я построил свой подкласс из определения GTKBuilder. Кто-нибудь знает, как?

Это было полезно?

Решение

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

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

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

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

Другие советы

Это не обычная практика для подкласса gtkwindow.

Я не думаю, что можно подклассное окно Toplevel, созданное из определения GTKBuilder.

GTKBuilder должен знать о вашем субклассированном виджете до создания.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top