PyQt: por que a adição de uma definição de classe manequim no meu arquivo fazer a falência de aplicação?
Pergunta
Considere o código abaixo:
#!/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 ok. Agora, se eu adicionar uma classe manequim (que herda de classe de um módulo QtGui) no escopo global ...
class MainWindow(QtGui.QMainWindow):
... # unchanged
class MyWidget(QtGui.QWidget):
def __init__(self):
super(MyWidget, self).__init__()
if __name__ == '__main__':
... # unchanged
... Quando eu lançar o script eu recebo o erro:
TypeError: argumento 1 de QMainWindow.setCentralWidget () tem um tipo inválido
Esta mensagem de erro é enigmática para mim como eu não pode conectá-lo à modificação feita. Você tem uma idéia do que poderia ser a fonte deste erro?
Solução
Não é possível reproduzir o problema como relatado: o seguinte código exato
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 muito bem para mim (mostrando uma janela vazia, claro). Então eu acho que é para baixo para detalhes versões! Eu estou usando Python 2.5.1 no Mac OS X 10.5.7 fornecido pelo sistema e adicionando um
print QtCore.PYQT_VERSION_STR
shows que eu estou na versão 4.5.1 do PyQt. E você?
Outras dicas
Eu não tenho trabalhado com PyQt antes, mas você não se esqueça de chamar o construtor da superclasse aqui?
class MyWidget(QtGui.QWidget):
def __init__(self):
# Where is the call to QtGui.QWidget's init ?
pass