Python PySide (internes c ++ Objekt bereits gelöscht)

10

Ich habe vor kurzem beschlossen, meine erste App mit Python und PySide zu schreiben. Aber ich habe ein Problem und hoffe ihr könnt mir helfen.

Python löst weiterhin Ausnahmen aus, die das "interne C ++ Objekt" gelöscht hat. Aus meiner begrenzten Erfahrung mit Python gehe ich davon aus, dass mein Objekt den Geltungsbereich verlässt und von Pythons Garbage Collector gelöscht wird.

Wie würde ich also eine mehrseitige Anwendung in Python mit PySide entwickeln? Und ich kann meine QWidgets behalten, damit ich die Seite erneut anzeigen kann.

Danke für Ihre Zeit.

Aktualisieren (Code)

%Vor%

Ich würde dann normalerweise auf das Mainpanel zugreifen, indem ich Folgendes anrufe:

%Vor%

Also gehe ich das falsch herum?

    
Johann du Toit 17.03.2011, 12:34
quelle

2 Antworten

8

Nach einigem Suchen und Haare ziehen fand ich die Lösung. Ich habe alle Seiten angezeigt, indem ich sie als zentrales Widget eingestellt habe, und beim Lesen der QMainWindow-Dokumentation habe ich gefunden dass mein Widget im Grunde wie beschrieben von qt gelöscht wird:

  

Hinweis: QMainWindow übernimmt die Verantwortung für   den Widget-Zeiger und löscht es bei   die passende Zeit.

Um eine mehrseitige Anwendung zu entwickeln, werfen Sie einen Blick auf QStackedWidget .

    
Johann du Toit 19.03.2011, 18:12
quelle
6

Siehe hier: PySide Pitfalls .

  

Wenn ein QObject nicht in den Geltungsbereich fällt   Python, es wird gelöscht. Du hast   darauf achten, einen Bezug zu halten   das Objekt:

     
  • Speichern Sie es als Attribut eines Objekts, das Sie in der Nähe haben, z.   self.window = QMainWindow ()
  •   
  • Übergeben Sie ein übergeordnetes QObject an den Konstruktor des Objekts, damit es in Besitz genommen wird   durch das Elternteil
  •   
    
Janne Karila 17.03.2011 12:51
quelle

Tags und Links