Python PySide (c ++ interne objet déjà supprimé)
Question
J'ai récemment décidé d'écrire ma première application avec Python et PySide. Mais j'ai un problème et espère que vous les gars peuvent aider.
Python conserve déclencher des exceptions que la « interne C ++ objet » est supprimé. D'après mon expérience limitée à la figure Python je que mon objet va hors de portée et d'être supprimé par le Garbage Collector de Python.
Alors, comment pourrais-je aller sur la conception d'une application multi-pages en Python avec PySide. Et être capable de garder mes QWidgets pour que je puisse montrer à nouveau la page.
Merci pour votre temps.
Mise à jour (Code)
instancing = None
def instance():
global instancing
if instancing == None:
instancing = WPZKernel()
return instancing
class WPZKernel:
win = None
mainscreen = None
def mainwindow(self):
if self.win == None:
self.win = GMKMainWindow(self)
return self.win
def main_panel(self):
if self.mainscreen == None:
self.mainscreen = GMKMainScreen(self.mainwindow())
return self.mainscreen
Je alors accéder normalement mainpanel en appelant:
import kernel
kernel.instance().main_panel()
Alors que je vais sur ce dans le mauvais sens?
La solution
Après quelques recherches et tirer les cheveux, je l'ai trouvé la solution. Je montrais toutes les pages en les définissant comme le widget central, et en lisant la documentation QMainWindow Je trouve que mon widget de obtient essentiellement supprimé par qt comme indiqué:
Note: QMainWindow prend possession de le pointeur widget et le supprime à le temps approprié.
Donc, pour développer une application multi-pages plutôt prendre un regard sur QStackedWidget .
Autres conseils
Voir ici:. PySide Pitfalls
Si un QObject tombe hors de portée en Python, il sera effacé. Tu as prendre soin de garder une référence à l'objet:
- Magasin comme un attribut d'un objet que vous gardez autour, par exemple self.window = QMainWindow ()
- Passez un QObject parent au constructeur de l'objet, il obtient appartient par le parent