PyQt: ¿por qué agregar una definición de clase ficticia en mi archivo hace que la aplicación se bloquee?

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

  •  22-07-2019
  •  | 
  •  

Pregunta

Considere el siguiente código:

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

Funciona bien. Ahora, si agrego una clase ficticia (que hereda de la clase de un módulo QtGui) en el ámbito global ...

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

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

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

... cuando inicio el script, aparece el error:

  

TypeError: argumento 1 de   QMainWindow.setCentralWidget () tiene un   tipo no válido

Este mensaje de error es críptico para mí, ya que no puedo conectarlo a la modificación realizada. ¿Tienes idea de cuál podría ser la fuente de este error?

¿Fue útil?

Solución

No se puede reproducir el problema como se informó: el siguiente código exacto

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

funciona bien para mí (mostrando una ventana vacía, por supuesto). ¡Así que supongo que se trata de detalles de versiones! Estoy usando Python 2.5.1 suministrado por el sistema en Mac OS X 10.5.7 y agrego un

print QtCore.PYQT_VERSION_STR

muestra que estoy en la versión 4.5.1 de PyQt. ¿Qué hay de ti?

Otros consejos

No he trabajado con PyQt antes, pero ¿no olvidaste llamar al constructor de la superclase aquí?

class MyWidget(QtGui.QWidget):
   def __init__(self):
      # Where is the call to QtGui.QWidget's init ?
      pass
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top