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

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
alexp
User
Beiträge: 6
Registriert: Mittwoch 10. März 2010, 15:36

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.
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

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
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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.
alexp
User
Beiträge: 6
Registriert: Mittwoch 10. März 2010, 15:36

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)
alexp
User
Beiträge: 6
Registriert: Mittwoch 10. März 2010, 15:36

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)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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 ;)
Antworten