Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

geloest - Python+QT=Error: underlying C/C++ has been deleted

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
ws1964
Hacker
Hacker
Beiträge: 332
Registriert: 10. Apr 2005, 20:37
Wohnort: Duesseldorf, Germany

geloest - Python+QT=Error: underlying C/C++ has been deleted

Beitrag von ws1964 »

Hallo,

Ich probiere mich gerade in der Programmierung von Python und versuche Dialoge mittels QT zu erstellen und dann ueber Python aufzurufen.
Mein System: openSuse 10.2
QT-version: QT4.3.2
QT-Designer: 4.3.2
PyQt-Version: 4.4.3
sip-version: 4.4.7

Meine Vorgehensweise:
Im Designer erstelle ich einen Dialog mit nur einem "OK" Button.
Speichere den Dialog unter "frmTest.ui" ab.
Danach uebersetze ich den Dialog:

Code: Alles auswählen

pyuic4 -o frmDialog.py frmtest.ui 
..und erhalte folgende Datei, die ich nicht editiere oder aendere!

Code: Alles auswählen

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'frmtest.ui'
#
# Created: Sat Sep  6 13:29:17 2008
#      by: PyQt4 UI code generator 4.4.3
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

class Ui_frmTest(object):
    def setupUi(self, frmTest):
        frmTest.setObjectName("frmTest")
        frmTest.resize(600, 188)
        self.befOK = QtGui.QPushButton(frmTest)
        self.befOK.setGeometry(QtCore.QRect(300, 110, 261, 61))
        self.befOK.setObjectName("befOK")

        self.retranslateUi(frmTest)
        QtCore.QMetaObject.connectSlotsByName(frmTest)

    def retranslateUi(self, frmTest):
        frmTest.setWindowTitle(QtGui.QApplication.translate("frmTest", "Test", None, QtGui.QApplication.UnicodeUTF8))
        self.befOK.setText(QtGui.QApplication.translate("frmTest", "&OK", None, QtGui.QApplication.UnicodeUTF8))
        self.befOK.setShortcut(QtGui.QApplication.translate("frmTest", "Alt+O", None, QtGui.QApplication.UnicodeUTF8))

Im geichen Pfad steht mein Programm, welches die Form aufrufen soll.

Code: Alles auswählen

#!/usr/bin/python

import sys
from PyQt4 import QtGui

from frmDialog import Ui_frmTest as Dlg

class MeinDialog(QtGui.QDialog, Dlg):
	def __init__(self):
		QtGui.__init__("")
		self.setupUi(self)

app=QtGui.QApplication(sys.argv)
dialog=MeinDialog()
dialog.show(frmTest)
sys.exit(app.exec_())

Ich mache die Datei mit "chmod" ausfuehrbar und erhalte folgende Fehlermeldung:

Code: Alles auswählen

wolf@linux-wolf:~/Documents/python/frmTest> ./frmtestaufruf.py
Traceback (most recent call last):
  File "./frmtestaufruf.py", line 15, in <module>
    dialog=MeinDialog()
  File "./frmtestaufruf.py", line 12, in __init__
    self.setupUi(self)
  File "/home/wolf/Documents/python/frmTest/frmDialog.py", line 14, in setupUi
    frmTest.setObjectName("frmTest")
RuntimeError: underlying C/C++ object has been deleted
Wie gesagt, den uebersetzten Quellcode (mittels pyuic4) habe ich nach der Uebersetzung nicht angefasst.

Hat hier schon jemand erfahrungen gesammelt?

Danke an alle.

Wolf
Zuletzt geändert von ws1964 am 27. Sep 2008, 19:52, insgesamt 1-mal geändert.
KUbuntu 18.4 64bit
ASUS F550C, NVIDIA GFORCE 720M
abgdf
Guru
Guru
Beiträge: 3403
Registriert: 13. Apr 2004, 21:15

Re: Python+QT=RuntimeError: underlying C/C++ object has been del

Beitrag von abgdf »

... ich schau mir das mal an (hab aber nur Qt3).

Im allgemeinen sind solche speziellen Fragen aber besser hier:

http://www.python-forum.de/forum-4.html

aufgehoben.

Viele Grüße
Benutzeravatar
ws1964
Hacker
Hacker
Beiträge: 332
Registriert: 10. Apr 2005, 20:37
Wohnort: Duesseldorf, Germany

[geloest] RuntimeError: underlying C/C++ object has been del

Beitrag von ws1964 »

Hallo, an alle und natuerlich an "abgdf",

Ich glaube den Fehler gefunden zu haben.
Dein Tipp mit dem Python-Forum war gut. Ich habe zwar den Fehler dort nicht gefunden, aber meinen "Syntax-Fehler".

Hier der korrigierte Aufruf der Form:

Code: Alles auswählen

01 #!/usr/bin/python
02
03
04 import sys
05 from PyQt4 import QtGui
06
07 from frmDialog import Ui_frmTest as Dlg
08
09 class MeinDialog(QtGui.QDialog, Dlg):
10	def __init__(self):
11		QtGui.QDialog.__init__(self)
12		self.setupUi(self)
13
14 app=QtGui.QApplication(sys.argv)
15 dialog=MeinDialog()
16 dialog.show()
17 sys.exit(app.exec_())
In Zeile 11 hatte ich nicht "QDialog" nach "QtGui." eingefuegt.
Und in die Klammern gehoert natuerlich "self" ohne die Anfuehrungszeichen.

Jetzt sehe ich die Form.

Danke "abgdf".

Wolf
KUbuntu 18.4 64bit
ASUS F550C, NVIDIA GFORCE 720M
Antworten