Seite 1 von 1

RuntimeError: underlying C/C++ object has been deleted

Verfasst: Donnerstag 18. März 2010, 11:59
von alexp
Hallo,

ich versuch ein QWidget durch folgende Funktion zu schließen.
Möchte aber bevor das Widget geschlossen wird eine Messagebox anzeigen.

Code: Alles auswählen

    def closeWindow(self):
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            window.close()
Bekomme beim Aufruf der Funktion jedoch folgende Fehlermeldung.

Code: Alles auswählen

Traceback (most recent call last):
  File "*.py", line 778, in closeWindow
    "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
RuntimeError: underlying C/C++ object has been deleted
Woran könnte das liegen?
Wäre für Hilfe dankbar.

Verfasst: Donnerstag 18. März 2010, 12:47
von ichisich
Kanns gerade nicht testen aber der Aufruf muss meine ich so lauten:

Code: Alles auswählen

        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
Mag sein das löst dein Problem

Verfasst: Donnerstag 18. März 2010, 13:10
von mkesper
Ich denke du musst auf den close-Event reagieren. Wenn die von dir erwähnte Methode ausgeführt wird, ist es bereits zu spät.

Verfasst: Donnerstag 18. März 2010, 13:34
von alexp
Wenn ich die Methode so schreibe, wie von ichisich vorgeschlagen,
bekomme ich den Fehler immernoch.
Also die Methode closeWindow benutze ich als Slot für einen Pushbutton.

Bekomme den gleichen Fehler, wenn ich einfach versuche eine Messagebox darzustellen.

Code: Alles auswählen

    def closeWindow(self):
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

Verfasst: Donnerstag 18. März 2010, 13:51
von alexp
Ah, ok, doof.
Meine Gui Class sah so aus

Code: Alles auswählen

class Ui_Gui(QtGui.QWidget):
    def __init__(self, bla):
        self.bla = bla
Im Konstruktor muss natürlich der Konstruktor der Oberklasse "QtGui.QWidget.__init__(self)" aufgerufen werden.

Sprich das muss so aussehen:

Code: Alles auswählen

class Ui_Gui(QtGui.QWidget):
    def __init__(self, bla):
        self.bla = bla
        QtGui.QWidget.__init__(self)

Verfasst: Donnerstag 18. März 2010, 14:03
von cofi
alexp hat geschrieben:Im Konstruktor muss natürlich der Konstruktor der Oberklasse "QtGui.QWidget.__init__(self)" aufgerufen werden.
Und am besten noch vor dem Rest ;)