Создание повторно используемых компонентов с помощью gtkglade

Я пишу простое приложение и использую Glade (GTK) для пользовательского интерфейса. Мне нужно много окон (~ 10), одно из которых будет открываться в зависимости от флагов командной строки, других контекстных вещей и т. д.

Теперь все эти окна очень похожи, у них есть 3 вкладки верхнего уровня, последняя вкладка одинакова во всех, у всех есть кнопки OK и Quit и т. д., поэтому я ищу способ построить эти окна в поляне. Я мог бы скопировать и вставить одно окно и внести в него изменения, но я ищу лучший способ, который позволит мне повторно использовать общие части окон.

Кроме того, я использую pygtk для загрузки окон.


person Shrikant Sharat    schedule 07.04.2011    source источник


Ответы (2)


Создайте виджет с общими аспектами, которые вы упомянули. Везде, где вам нужно реализовать что-то другое, поместите GtkAlignment с подходящим именем. Не забудьте изменить выравнивание и значения заполнения файла GtkAlignment.

В PyGTK вы можете gtk.Builder.get_object( name), чтобы получить доступ к этим пустым областям и добавить в них дополнительные компоненты (которые также можно разработать с помощью Glade).

person detly    schedule 07.04.2011
comment
Как спроектировать дополнительные компоненты для добавления к GtkAlignment, мне нужно окно верхнего уровня или что-то в этом роде, чтобы что-то спроектировать. Должен ли я создать фиктивное окно и получить объект компонента из этого окна с помощью .get_object и добавить его в GtkAlignment? - person Shrikant Sharat; 07.04.2011
comment
@Shrikant Sharat - щелкните правой кнопкой мыши кнопку любого виджета, который вы хотите использовать в качестве виджета верхнего уровня, и в меню должен появиться пункт «Добавить виджет как верхний уровень». Нажмите на нее, и все готово :) Знаю, вряд ли это интуитивно понятно, но оно есть. - person detly; 08.04.2011
comment
@detly, спасибо, но я не вижу такой возможности. Я использую старую версию Glade (3.6.7). Это то, что предлагают репозитории Ubuntu :). Однако для всех, кто столкнется с вашим решением, ваше решение имеет больше смысла, поэтому я отмечаю его. - person Shrikant Sharat; 11.04.2011
comment
@Shrikant - может быть другой способ, я проведу небольшое исследование. - person detly; 11.04.2011
comment
@Shrikant - я тоже использую 3.6.7. Если я нажму правой кнопкой мыши на кнопку, чтобы добавить GtkAlignment, появится всплывающее меню с одним пунктом: Добавить виджет как верхний уровень. Вы говорите, что не видите? - person detly; 11.04.2011
comment
Подождите, (хлопает по голове) Я щелкнул правой кнопкой мыши по компоненту, который хочу установить на верхнем уровне, в панели редактора, а не по кнопке слева. Теперь понял, спасибо большое :) - person Shrikant Sharat; 11.04.2011
comment
@Shrikant - отлично, рад, что смог помочь :) - person detly; 11.04.2011

Хорошо, с помощью ответа detly я могу заставить что-то работать. Для тех, кому это нужно, вот что я сделал.

main.glade содержит окно и весь хлам, который мне нужен для отображения во всех окнах. comp.glade содержит окно с компонентом vbox с дополнительными вещами, которые мне нужны, давайте назовем его «top_comp».

Теперь в main.glade я помещаю компонент gtk.Alignment в то место, где мне нужно загрузить дополнительный компонент, и называю его, скажем, 'comp_holder'. С застройщиком у меня есть, я делаю

builder = gtk.Builder()
builder.add_from_file('main.glade'))
builder.add_from_file('comp.glade'))

builder.get_object('top_comp').reparent(builder.get_object('comp_holder'))

Этот метод, кажется, работает на данный момент, но я не знаю, правильный ли это способ сделать это.

Любые предложения по вышеуказанному приветствуются.

person Shrikant Sharat    schedule 07.04.2011
comment
Смотрите мой комментарий выше, как это сделать. Я делал это так часто, что забыл, какой у него глупый интерфейс :P - person detly; 08.04.2011