Как получить доступ к родительскому окну в диалоговом окне

Я использую Быстро и создал главное окно и диалоговое окно. В главном окне я устанавливаю доступ к базе данных (u1db) в finish_initializing методе (self.db =...). После действия я открываю диалоговое окно, где мне нужен доступ к базе данных.

Я думал, что могу использовать сам get_parent () в диалоговом окне, чтобы получить экземпляр главного окна и получить доступ к базе данных, но возвращаемое значение get_parent () не является Ни одним.

Мой вопрос, как я могу получить доступ к экземпляру родительского окна в диалоговом окне или возможно куда я должен поместить экземпляр обертки базы данных?

Сокращенный код:

# GuitestWindow.py
class GuitestWindow(Window):

    def finish_initializing(self, builder):
        ...
        self.db = u1db.open(
            db_path,
            create=True
        )


    def on_addaccountbutton_clicked(self, widget):
        dialog = NewAccountDialog.NewAccountDialog(db=self.db)
        result = dialog.run()
        dialog.hide()



# NewAccountDialog.py
class NewAccountDialog(Gtk.Dialog):
    __gtype_name__ = "NewAccountDialog"

    def __new__(cls, *args, **kwargs):
        print "__new__: %s : %s" % (args, kwargs)
        builder = get_builder('NewAccountDialog')
        new_object = builder.get_object('new_account_dialog')
        new_object.finish_initializing(builder)
        print "__new__ end"
        return new_object


    def __init__(self, *args, **kwargs):
        print "__init__: %s : %s" % (args, kwargs)
        self.db = kwargs.get('db')
        super(NewAccountDialog, self).__init__(*args, **kwargs)
        print "__init__ end"

Результат:

__new__: () : {'db': <u1db.backends.sqlite_backend.SQLitePartialExpandDatabase object at 0x1884f50>}
__init__: () : {}
__init__ end
__new__ end
__init__: () : {'db': <u1db.backends.sqlite_backend.SQLitePartialExpandDatabase object at 0x1884f50>}
__init__ end
2
задан 6 September 2012 в 15:28

1 ответ

Это довольно просто, просто передайте свой экземпляр главного окна Вашему диалоговому окну :-).

    # ...
    dialog = NewAccountDialog.NewAccountDialog(self)
    # ...

class NewAccountDialog(Gtk.Dialog):
    def __init__(self, main):
        self.main = main
        # I can manage main now!
1
ответ дан 21 October 2019 в 11:39

Другие вопросы по тегам:

Похожие вопросы: