2016-09-13 7 views
1

Я разрабатывал кросс-платформенную программу с GTK и Glade, поскольку я был использован только для приложений Windows. Этот вопрос включает в себя виджеты (я считаю, что это то, что они называются) и как их можно «добавить» в главное окно. Это лучше объясняется изображениями.GTK + 3 и Glade: Добавить виджеты на боковой панели во время выполнения (C#)

У меня есть MainWindow, который вот так:

Main Window

Вы можете увидеть правая сторона намеренно оставлена ​​пустой. Это происходит потому, что она будет иметь динамическое содержимое, как игрока информацию, в виде миникарта, инвентарь и т.д. Вот один из виджетов, которые я хочу, чтобы быть включенными в правой стороне:

Player Info

Это в основном имеет только основную информацию который будет добавлен. Не обращая внимания на все основное окно и просто сосредоточиться на правой части, в кодировании я хочу, чтобы показать что-то вроде этого:

Final Right Side Bar

вопрос, я не совсем понимаю, если это на самом деле, как вы можете сделайте это, или я должен на самом деле закодировать правую панель непосредственно в клиенте вместо этого. Или закодировать его динамически с нуля * IE Крите метки/etc во время выполнения, а не это окно PlayerInfo.

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

Я предполагаю, что вам нужно добавить виджет с кодировкой C# при создании.

+0

Также я пробовал что-то вроде Виджет newWidget = новый виджет (builder.GetObject («PlayerInfo»). Handle); Box test = builder.GetObject ("boxDropDown"); test.Add (newWidget); Где boxDropDown - это правый бокс, куда будут выходить все выпадающие окна, I.E. статистика игрока. Я могу проверить.show(), чтобы показать его, но вместо этого он находится в собственном окне. Я предполагаю, что здесь что-то не хватает. – Valleriani

ответ

1

Я просто понял, что

Widget newWidget = new Widget(builder.GetObject("PlayerInfo").Handle); 
Box test = builder.GetObject("boxDropDown"); 
test.Add(newWidget); 

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

+1

Остерегайтесь того, что если объект не является GtkWndow, и вы ничего не добавили, удаление всех ссылок на GtkBuilder также уничтожит объект, о котором идет речь. Вы также должны искать составные шаблоны виджета и (для типа создаваемого окна отображения) GtkExpander/GtkRevealer и/или GNOME Docking Library. – andlabs

+0

У меня проблема, когда я пытаюсь добавить виджеты в качестве составных элементов ака шаблонов. Когда я запускаю программу, она заявляет, что не ожидала шаблона. Я слышал, вам нужно сначала установить шаблон, но информации о том, как это сделать в GTK #, немного. У вас есть идея? – Valleriani

1

Если я правильно определил ваш вопрос, вы можете подумать о том, чтобы прекратить ярлыки при построении вашего интерфейса непосредственно на поляне, иметь его «пустым» или указывать номер в начале (строить/связывать его при создании, так как все остальные виджеты так уверен, что он будет находиться внутри окна), а затем динамически обновлять текст (весь текст или только стоимость caratheristics) с инструкцией

set_label (см here) к примеру я пишу в Python (self. is handler)

self.my_label_widget.set_label("STR: 26") 

Я работаю в Python, я не могу дать вам код C, но я думаю, что базовая идея такая же.