• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

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

ws1964

Hacker
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:
pyuic4 -o frmDialog.py frmtest.ui
..und erhalte folgende Datei, die ich nicht editiere oder aendere!
Code:
# -*- 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:
#!/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:
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
 

abgdf

Guru
... 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
 
OP
ws1964

ws1964

Hacker
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:
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
 
Oben