Como acessar a janela pai na caixa de diálogo

2

Estou usando o Quickly e criei a janela principal e uma caixa de diálogo. Na janela principal, estou configurando o acesso ao banco de dados (u1db) no método finish_initializing (self.db = ...). Depois de uma ação eu abro um diálogo onde preciso acessar o banco de dados.

Eu pensei que eu poderia usar self.get_parent () no diálogo para obter uma instância da janela principal e acessar o banco de dados, mas o valor de retorno de get_parent () é None.

Minha pergunta é: como posso acessar a instância da janela pai na caixa de diálogo ou onde devo colocar a instância do wrapper do banco de dados?

Código abreviado:

# 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"

Resultado:

__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
    
por Bruce 01.09.2012 / 11:00

1 resposta

1

Isso é bem simples, apenas passe sua instância da janela principal para sua caixa de diálogo: -).

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

class NewAccountDialog(Gtk.Dialog):
    def __init__(self, main):
        self.main = main
        # I can manage main now!
    
por Timo 02.09.2012 / 00:35