Python-PySide (Interne c++ - Objekt wurde Bereits Gelöscht)
Habe ich vor kurzem beschlossen, zu schreiben, dass meine erste app mit Python und PySide. Aber ich habe ein problem und hoffe, Euch helfen können.
Python hält das auslösen von Ausnahmen, dass die "Internen C++ - Objekt" wird gelöscht. Aus meiner begrenzten Erfahrung mit Python, ich vermute, dass mein Objekt außerhalb des Gültigkeitsbereichs und werden gelöscht, indem Sie Python Garbage Collector.
So, wie würde ich mich über die Gestaltung eines multi-page-Anwendung in Python mit PySide. Und Lage zu halten, meine QWidgets so kann ich zeigen Sie die Seite erneut.
Vielen Dank für Ihre Zeit.
Update (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
Ich würde dann in der Regel Zugriff auf das mainpanel durch aufrufen:
import kernel
kernel.instance().main_panel()
So werde ich über dieses der falsche Weg ist?
InformationsquelleAutor Johann du Toit | 2011-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einigem suchen und Haare ziehen, fand ich die Lösung. Ich war mit allen Seiten, indem Sie als das zentrale widget, und beim Lesen der QMainWindow Dokumentation ich fand, dass mein widget grundsätzlich gelöscht wird von qt wie gesagt:
So zu entwickeln, eine Multi-Seite-Anwendung eher nehmen Sie einen Blick auf QStackedWidget.
InformationsquelleAutor Johann du Toit
Siehe hier: PySide Fallstricke.
Nein, jedes Python-Objekt tun wird, solange sich das Objekt nicht außerhalb des Bereichs.
Ok, aber wo meine Instanz-Objekt den Gültigkeitsbereich verlässt? Ich bin dem Start der app durch den Aufruf von kernel.Beispiel().bootstrap() und alle anderen widgets call kernel.Beispiel().mainwindow() brauchen, wenn Sie die mainwindow-oder andere widgets.
Hmm... ich habe nur gerade jetzt sah Sie den code, und es scheint OK,
instancing
geht nicht out-of-scope.Hi, eine Idee, was ich falsch mache?
InformationsquelleAutor Janne Karila
Ist diese Antwort zu widmen, um Sie wissen zu lassen eine Art das gleiche problem.
Ich habe laufen in dieses Problem.
Für das Auswendiglernen ist es,möchte ich mal meine Erfahrung hier.
1.QMainWindow
setCentralWidget()
Dies ist oft diskutiert und ich habe oft festgestellt.
Um dies zu vermeiden,müssen wir darauf achten, von der das widget ersetzt werden.
Wenn ich will ersetzen Sie diese centralwidget mit anderen Widgets
Ich centralwidget zu anderen widget im Voraus.
Besonders müssen wir darauf achten, die Schicht von widgets auf dem centralwidget im Zusammenhang mit dem widget ersetzt werden.
2.QTextBlockUserData
Hatte ich überprüfte meine
QTextBlockUserData
auf einmal nach jeder Aktion.Hier einige Schnipsel, aber die
QTextBlockUserData
hier wird über das gleiche Objekt.print("try to make all nodes align.blockUserData is deleted?,block.userData())
Dieser Druck ist zu überprüfen, die Existenz von
QTextBlockUserData
nach dem löschen der anderen Blöcke und alinging.Natürlich,dieQTextBlockUserData
ist in Ihnen enthalten.)Weil ich weiß nicht, Wann die blockUserData ist gelöscht,ich muss also überprüft haben, die Existenz der userDatas jeder Zeit.Dies ist die Zeit, wenn ich Sie gelöscht, anderen block-text-Zeile.
Ist anderen löschen von Blöcken, die im Zusammenhang mit der
QTextBlockUserData
?try to make all nodes align. blockUserData is deleted? <__main__.********UserData object at 0x000001E17BE41988>
Nicht gelöscht.
Und ich habe versucht, die gleichen Daten auf der gleichen Stelle.
Diese userDatas[0] wurde überprüft vor der Einstellung.
print("Does userDatas have userData?") userDatas[0])
>Does userDatas have userData? [<__main__.********UserData object at 0x000001E17BE41988>]
Bitte schauen Sie es, es war die gleiche Adresse.
Und habe es eingestellt,
next_textediter_tc.block().setUserData(userDatas[0])
Was ich sagen will ist, das gleiche poblem passiert, wenn ich die gleiche Adresse auf den gleichen Platz.
Nach dem löschen dieser Einstellung, dieser Fehler ist noch nie passiert.
Ich vielleicht hinzufügen, eine Art von problem und melden es hier immer und immer wieder jedes mal, wenn ich Begegnung an diesem problem.
InformationsquelleAutor user9402680