Pregunta

Recientemente decidí escribir mi primera aplicación con Python y Pyside. Pero tengo un problema y espero que puedan ayudarlo.

Python sigue aumentando las excepciones de que se elimina el "objeto C ++ interno". Desde mi experiencia limitada con Python, creo que mi objeto está saliendo del alcance y la eliminación del recolector de basura de Python.

Entonces, ¿cómo podría diseñar una aplicación de varias páginas en Python con Pyside? Y poder mantener mis Qwidgets para que pueda mostrar la página nuevamente.

Gracias por tu tiempo.

Actualización (código)

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

Entonces normalmente accedería al mainpanel llamando:

import kernel
kernel.instance().main_panel()

Entonces, ¿estoy haciendo esto de la manera incorrecta?

¿Fue útil?

Solución

Después de un poco de búsqueda y tirón del cabello, encontré la solución. Estaba mostrando todas las páginas estableciéndolas como el widget central y al leer el QMainWindow Documentation Descubrí que mi widget básicamente es eliminado por QT como se indica:

Nota: QmainWindow toma posesión del puntero del widget y lo elimina en el momento apropiado.

Entonces, desarrollar una aplicación de varias páginas en lugar de echar un vistazo a QStackedWidget.

Otros consejos

Mira aquí: Pyside trampfalls.

Si un Qobject cae del alcance en Python, se eliminará. Tienes que ocuparse de mantener una referencia al objeto:

  • Guárdelo como un atributo de un objeto que mantiene, por ejemplo, Self.Window = QMainWindow ()
  • Pase un Qobject matriz al constructor del objeto, por lo que es propiedad de los padres
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top