Я сделал все свое определение графического интерфейса на поляне, я использую PyGObject с python 2.7. Я сделал несколько виджетов с идентификаторами, и я могу получить эти объекты, вызвав соответствующий идентификатор, сейчас я делаю что-то вроде этого:
class MLPNotebookTab:
def __init__(self):
builder = Gtk.Builder.new_from_file(UI_FILE)
builder.connect_signals(self)
self.notebook = builder.get_object('MLPNotebook')
def add_tab(self, content):
pages = self.notebook.get_n_pages()
label = "MLP #" + str(pages + 1)
tab = NotebookTabLabel(label, self.notebook, pages + 1)
self.notebook.append_page(content, tab.header)
def on_btn_add_tab_clicked(self, button):
self.add_tab(Gtk.Label(label= "test"))
Определение файла пользовательского интерфейса точно такое же, как и было бы, это просто блокнот. Я хочу сделать класс самой записной книжкой и предварительно загрузить другие атрибуты, которые мы установили в файле пользовательского интерфейса. Я нашел здесь какую-то реализацию: https://eeperry.wordpress.com/2013/01/05/pygtk-new-style-python-class-using-builder/
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import gtk, sys, os
class MainWindow(gtk.Window):
__gtype_name__ = "MainWindow"
def __new__(cls):
"""This method creates and binds the builder window to class.
In order for this to work correctly, the class of the main
window in the Glade UI file must be the same as the name of
this class."""
app_path = os.path.dirname(__file__)
try:
builder = gtk.Builder()
builder.add_from_file(os.path.join(app_path, "main.ui"))
except:
print "Failed to load XML GUI file main.ui"
sys.exit(1)
new_object = builder.get_object('window')
new_object.finish_initializing(builder)
return new_object
def finish_initializing(self, builder):
"""Treat this as the __init__() method.
Arguments pass in must be passed from __new__()."""
builder.connect_signals(self)
# Add any other initialization here
Я не знаю, лучший ли это способ сделать это. Пожалуйста помоги!