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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top