Ситуация такая:
В начале работы с программой главное окно (экземпляр класса Viewer) при инициализации создает еще одно окно - стартовое меню - экземпляр Bases() (ListStore + TreeView). Юзер, выбирает одно из значений (путь к базе) в Bases(), которое должно быть учтено при заполнении Viewer'a данными. Решил хранить переменную с путем к базе в объекте-родителе обоих классов, Common(). Но не пойму, как ее перезаписать из child.
Пока писал, понял, что надо было просто запустить Bases отдельно, получить оттуда данные. Потом запустить Viewer с учетом полученных данных. Тем не менее, все равно охота получить ответ на вопросы (они - ниже).
Вот что набыдлокодил:
def class Common():
''' Коллбэки и проч '''
....
self.base_path = 'empty'
def class Viewer(Common):
def __init__(self, b_name):
Common.__init__(self)
...
self.bss = Bases(b_name)
self.bss.window_b.connect('hide', self.print_main_path)
def print_main_path(self, win):
print self.main_path
def class Bases(Common):
def __init__(self):
Common.__init__(self)
self.window_b = gtk.Window(gtk.WINDOW_TOPLEVEL)
.....
self.b_tv = gtk.TreeView()
.....
self.window_b.set_type_hint (gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
self.window_b.show()
self.window_b.connect("destroy", self.destroy_cb)
self.b_tv.connect('row-activated', self.base_hide)
def base_hide(self, tv, path, column):
... get full_path from TreeView ...
self.base_path = full_path
self.window_b.hide()
1. Так вообще делать стоит? 2. Проблема тут в том, что коллбэк в Viewer печатает не full_path, а «empty». Как обновить переменную в родительском объекте? 3. Подскажите нормальный способ передавать данные из одного объекта в другой - попадаются какие-то костыльные методы все время.