Python PySide (c ++ interno oggetto già eliminato)
Domanda
Recentemente ho deciso di scrivere la mia prima app con Python e PySide. Ma ho un problema e spero voi ragazzi può aiutare.
Python mantiene sollevando eccezioni che il "++ oggetto interno C" è soppressa. Dalla mia esperienza limitata con Python ho cifra che il mio scopo è uscire di portata e di essere eliminato dal Garbage Collector di Python.
Quindi, come potrei fare per la progettazione di un'applicazione multi-page in Python con PySide. Ed essere in grado di mantenere i miei QWidgets modo che io possa mostrare di nuovo la pagina.
Grazie per il vostro tempo.
Aggiorna (Codice)
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
Vorrei poi normalmente accedere alla mainpanel chiamando:
import kernel
kernel.instance().main_panel()
Così sto andando su questo nel modo sbagliato?
Soluzione
Dopo qualche ricerca e tirare i capelli, ho trovato la soluzione. Stavo mostrando tutte le pagine impostandole come il widget centrale, e durante la lettura della documentazione QMainWindow ho scoperto che il mio widget di fondo viene eliminato da Qt come affermato:
Nota: QMainWindow assume la proprietà di il puntatore widget e l'elimina in al momento opportuno.
Quindi, per sviluppare un'applicazione multi-pagina piuttosto dare un'occhiata a QStackedWidget .
Altri suggerimenti
Vedi qui:. PySide insidie ??
Se un QObject rientra nell'ambito di Python, otterrà cancellato. Hai prendersi cura di mantenere un riferimento l'oggetto:
- memorizzarlo come un attributo di un oggetto si mantiene intorno, per esempio self.window = QMainWindow ()
- Passa un QObject genitore di costruzione dell'oggetto, quindi diventa di proprietà dal genitore