PyQt: perché l'aggiunta di una definizione di classe fittizia nel mio file causa l'arresto anomalo dell'applicazione?

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

  •  22-07-2019
  •  | 
  •  

Domanda

Considera il codice seguente:

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

Funziona bene. Ora, se aggiungo una classe fittizia (che eredita dalla classe di un modulo QtGui) nell'ambito globale ...

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

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

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

... quando lancio lo script ottengo l'errore:

  

TypeError: argomento 1 di   QMainWindow.setCentralWidget () ha un   tipo non valido

Questo messaggio di errore è criptico per me in quanto non riesco a collegarlo alla modifica effettuata. Hai idea di quale potrebbe essere la fonte di questo errore?

È stato utile?

Soluzione

Impossibile riprodurre il problema come riportato: il seguente codice esatto

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

funziona perfettamente per me (mostrando ovviamente una finestra vuota). Quindi immagino che dipenda dai dettagli delle versioni! Sto usando Python 2.5.1 fornito dal sistema su Mac OS X 10.5.7 e aggiungendo un

print QtCore.PYQT_VERSION_STR

mostra che sono sulla versione 4.5.1 di PyQt. E tu?

Altri suggerimenti

Non ho mai lavorato con PyQt prima, ma non hai dimenticato di chiamare qui il costruttore della superclasse?

class MyWidget(QtGui.QWidget):
   def __init__(self):
      # Where is the call to QtGui.QWidget's init ?
      pass
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top