2009-08-05 2 views
0

Betrachten Sie den Code unten:PyQt: Warum führt das Hinzufügen einer Dummy-Klassendefinition in meiner Datei zum Absturz der Anwendung?

#!/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_()) 

ok funktioniert. Nun, wenn ich eine Dummy-Klasse hinzufügen im globalen Bereich (die von einem QtGui Moduls Klasse erbt) ...

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 of QMainWindow.setCentralWidget() has an invalid type

Diese Fehlermeldung ist für mich kryptisch, da ich sie nicht mit der durchgeführten Änderung verbinden kann. Haben Sie eine Idee, was könnte die Ursache für diesen Fehler sein?

Antwort

1

Kann das Problem, wie berichtet nicht reproduzieren: der folgenden genauen 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 liegt an Versionsdetails! Ich verwende System bereitgestellte Python 2.5.1 auf Mac OS X 10.5.7 und das Hinzufügen eines

print QtCore.PYQT_VERSION_STR 

zeigt I 4.5.1 von PyQt auf Version bin. Was ist mit Ihnen?

+0

Python 2.6.2 von python.org und PyQt 4.5.2 Zurück zu Python 2.5.4 und es funktioniert wie ein Charme. Vielen Dank! – kraymer

+0

@kraymer, du bist willkommen, aber es ist mühsam, wenn das neueste PyQt nicht mit dem neuesten Python funktioniert - wenn ich Zeit habe, werde ich versuchen, PyQt mit Python 2.6.2 neu zu erstellen und zu sehen, was gibt (vielleicht öffnen a Fehler auf PyQts Tracker ...?) –

0

Ich habe noch nicht mit PyQt gearbeitet, aber hast du nicht vergessen, den Konstruktor der Superklasse hier aufzurufen?

class MyWidget(QtGui.QWidget): 
    def __init__(self): 
     # Where is the call to QtGui.QWidget's init ? 
     pass 
+0

Ergebnis ist das gleiche, aber ich modifiziere meinen Code, um das klar zu machen. – kraymer

Verwandte Themen