PyQt: warum macht den Absturz der Anwendung eine Dummy-Klassendefinition in meiner Datei hinzufügen?
Frage
Betrachten Sie den Code unten:
#!/usr/bin/env python
from PyQt4 import QtCore, QtGui
import os,sys
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.listWidget = QtGui.QListWidget(None)
self.setCentralWidget(self.listWidget)
if __name__ == '__main__':
app = QtGui.QApplication (sys.argv)
mainWin = MainWindow ()
mainWin.show ()
sys.exit (app.exec_())
funktioniert ok. Nun, wenn ich eine Dummy-Klasse hinzufügen (das erbt von einer Klasse QtGui-Modul) im globalen Bereich ...
class MainWindow(QtGui.QMainWindow):
... # unchanged
class MyWidget(QtGui.QWidget):
def __init__(self):
super(MyWidget, self).__init__()
if __name__ == '__main__':
... # unchanged
... wenn ich das Skript starten erhalte ich die Fehlermeldung:
Typeerror: Argument 1 von QMainWindow.setCentralWidget () eine ungültiger Typ
Diese Fehlermeldung ist für mich rätselhaft, wie ich es getan, um die Änderung keine Verbindung herstellen kann. Haben Sie eine Idee, was die Quelle dieses Fehlers sein könnte?
Lösung
Kann das Problem nicht reproduzieren, wie berichtet: der folgenden genaue Code
from PyQt4 import QtCore, QtGui
import os, sys
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.listWidget = QtGui.QListWidget(None)
self.setCentralWidget(self.listWidget)
class MyWidget(QtGui.QWidget):
def __init__(self):
super(MyWidget, self).__init__()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
läuft für mich ganz gut (ein leeres Fenster natürlich angezeigt). Also ich denke, es ist bis auf Versionen Details! Ich verwende System bereitgestellte Python 2.5.1 auf Mac OS X 10.5.7 und das Hinzufügen von einem
print QtCore.PYQT_VERSION_STR
zeigt, dass ich auf Version 4.5.1 von PyQt bin. Was ist mit dir?
Andere Tipps
Ich habe nicht mit PyQt vorher gearbeitet, aber du hast nicht vergessen, den Konstruktor der übergeordneten Klasse hier zu nennen?
class MyWidget(QtGui.QWidget):
def __init__(self):
# Where is the call to QtGui.QWidget's init ?
pass