У меня есть созданный в Glade интерфейс с виджетом Gtk.Notebook. В этот notebook требуется добавлять неопределенное количество вкладок со сложной разметкой (кнопки, надписи, таблица). Описывать весь интерфейс программно трудоемко, да и неправильно на мой взгляд задавать в коде отступы, цвета и т. п. Сейчас примерно делаю так:
tab.glade:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<object class="GtkBox" id="box">
<!-- 7 КБ вырезано -->
</object>
</interface>
Код:
def get_id(elem_id, order_id):
return 'order_{0}_{1}'.format(order_id, elem_id)
def add_from_file(builder, filename, order_id):
prefix = get_id('', order_id)
xml_str = get_file_contents(filename)
xml_str = xml_str.replace('id="', 'id="{0}'.format(prefix))
builder.add_from_string(xml_str)
builder = Gtk.Builder()
builder.add_from_file('main_window.glade')
for order_id in orders:
add_from_file(builder, 'tab.glade', order_id)
Это говнокод? Какие есть человеческие способы?