PyQt: pourquoi l'ajout d'une définition de classe fictive dans mon fichier provoque le blocage de l'application?

StackOverflow https://stackoverflow.com/questions/1233711

  •  22-07-2019
  •  | 
  •  

Question

Considérez le code ci-dessous:

 #!/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 de la classe d’un 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 j'obtiens l'erreur:

  

TypeError: argument 1 de   QMainWindow.setCentralWidget () a un   type invalide

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?

Était-ce utile?

La solution

Impossible de reproduire le problème tel qu'il a été 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 cela dépend des détails des versions! J'utilise Python 2.5.1 fourni par le système sur Mac OS X 10.5.7 et j'ajoute un

print QtCore.PYQT_VERSION_STR

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

Autres conseils

Je n'ai jamais 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top