J'utilise rapidement et j'ai créé la fenêtre principale et une boîte de dialogue. Dans la fenêtre principale, je définis l'accès à la base de données (u1db) dans la méthode finish_initializing (self.db = ...). Après une action, j'ouvre une boîte de dialogue où j'ai besoin d'accéder à la base de données.
J'ai pensé que je pouvais utiliser self.get_parent () dans la boîte de dialogue pour obtenir l'instance de la fenêtre principale et accéder à la base de données, mais la valeur de retour de get_parent () est None.
Ma question est, comment puis-je accéder à l'instance de la fenêtre parent dans la boîte de dialogue ou peut-être où dois-je placer l'instance de l'encapsuleur de base de données?
Code abrégé:
# 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_= "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"
Résultat:
__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
C'est assez simple, passez simplement votre instance de fenêtre principale dans votre boîte de dialogue :-).
# ...
dialog = NewAccountDialog.NewAccountDialog(self)
# ...
class NewAccountDialog(Gtk.Dialog):
def __init__(self, main):
self.main = main
# I can manage main now!