2009-08-05 7 views
0

le code ci-dessous Tenir compte:PyQt: pourquoi l'ajout d'une définition de classe fictive dans mon fichier fait planter l'application?

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

Fonctionne bien. Maintenant, si j'ajoute une classe fictive (qui hérite d'une classe du module QtGui) dans la portée globale ...

class MainWindow(QtGui.QMainWindow): 
... # unchanged 

class MyWidget(QtGui.QWidget): 
    def __init__(self): 
     super(MyWidget, self).__init__() 

if __name__ == '__main__': 
... # unchanged 

... quand je lance le script que je reçois l'erreur:

TypeError: argument 1 of QMainWindow.setCentralWidget() has an invalid type

Ce message d'erreur est cryptique pour moi car je ne peux pas le connecter à la modification effectuée. Avez-vous une idée de ce qui pourrait être la source de cette erreur?

Répondre

1

Impossible de reproduire le problème signalé: le code exact suivant

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_()) 

fonctionne très bien pour moi (montrant une fenêtre vide bien sûr). Donc je suppose que c'est aux détails des versions! J'utilise le système fourni par Python 2.5.1 sous Mac OS X 10.5.7 et l'ajout d'un

print QtCore.PYQT_VERSION_STR 

montre que je suis sur la version 4.5.1 de PyQt. Et vous?

+0

Python 2.6.2 à partir de python.org et PyQt 4.5.2 Il suffit de revenir à Python 2.5.4 et cela fonctionne comme un charme. Merci! – kraymer

+0

@kraymer, de rien, mais c'est gênant si le dernier PyQt ne fonctionne pas avec le dernier Python - quand j'aurai le temps je vais essayer de reconstruire PyQt avec Python 2.6.2 et voir ce qui donne (peut-être ouvrir un bug sur le tracker de PyQt ...?) –

0

Je n'ai pas travaillé avec PyQt auparavant, mais n'avez-vous pas oublié d'appeler le constructeur de la superclasse ici?

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

Le résultat est le même mais je modifie mon code pour le rendre clair. – kraymer

Questions connexes