LINUX.ORG.RU

Переход с GtkUiManager на GtkBuilder

 ,


0

2

Привет форумчане. Загорелся я тут перевести одно приложение с устаревшего формата построения интерфейса GtkUiManager на широкоиспользуемый GtkBuilder и тут возникла одна проблема. В GtkUiManager есть элемент placeholder, являющийся в своём роде пустышкой, в который можно в дальнейшем добавлять другие элементы. Есть в gtkbuilder аналог данному тегу или подобная функциональность, чтобы модифицировать UI из нескольких .ui файлов?



Последнее исправление: anzor_varshavin (всего исправлений: 1)

Тег placeholder точно есть, но как правильно использовать его для сборки я не уверен. Лично собираю gui из нескольких файлов вручную: загружаю все файлы builder, затем уже в коде приложения расставляю внешние виджеты по контейнерам.

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk


class Main:
    def __init__(self):
        files = ("window.ui", "page1.ui", "page2.ui",)
        elements = ("window", "main-box", "label1", "label2")

        self.builder = Gtk.Builder()
        for file_ in files:
            self.builder.add_from_file(file_)
        self.gui = {element: self.builder.get_object(element) for element in elements}

        self.gui["main-box"].pack_start(self.gui["label1"], True, True, 0)
        self.gui["main-box"].pack_start(self.gui["label2"], True, True, 0)

        self.gui["window"].connect("delete-event", Gtk.main_quit)
        self.gui["window"].show_all()


if __name__ == "__main__":
    app = Main()
    Gtk.main()

window.ui
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <object class="GtkWindow" id="window">
    <property name="default_width">1280</property>
    <property name="default_height">720</property>
    <child>
      <object class="GtkBox" id="main-box">
      </object>
    </child>
  </object>
</interface>
page1.ui
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <object class="GtkLabel" id="label1">
   <property name="label">Hello</property>
 </object>
</interface>
page2.ui
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <object class="GtkLabel" id="label2">
   <property name="label">World</property>
 </object>
</interface>

Worron ★★★
()

используй для этого пустой box или grid, и в него уже лепи, что там тебе нужно

ananas ★★★★★
()

В GtkUiManager есть элемент placeholder, являющийся в своём роде пустышкой, в который можно в дальнейшем добавлять другие элементы. Есть в gtkbuilder аналог данному тегу

Зачем аналог? Он самый и есть:

<child>
     <placeholder/>
</child>

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

Да, возможно тег есть, но если использовать его также, как в GtkUiManager, то собственно, никаких изменений. Как тогда использовать этот тег в gtkbuilder?

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