PyQt:ファイルにダミークラス定義を追加すると、アプリケーションがクラッシュするのはなぜですか?
質問
以下のコードを検討してください:
#!/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_())
正常に動作します。 次に、グローバルスコープに(QtGuiモジュールのクラスから継承する)ダミークラスを追加すると...
class MainWindow(QtGui.QMainWindow):
... # unchanged
class MyWidget(QtGui.QWidget):
def __init__(self):
super(MyWidget, self).__init__()
if __name__ == '__main__':
... # unchanged
...スクリプトを起動するとエラーが表示されます:
TypeError:引数1 QMainWindow.setCentralWidget()には 無効なタイプ
このエラーメッセージは、完了した変更に接続できないため、わかりにくいです。 このエラーの原因は何かをご存知ですか?
解決
報告された問題を再現できません:次の正確なコード
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_())
正常に動作します(もちろん空のウィンドウを表示します)。だから、バージョンの詳細にかかっていると思います! Mac OS X 10.5.7でシステム提供のPython 2.5.1を使用しており、
print QtCore.PYQT_VERSION_STR
は、PyQtのバージョン4.5.1を使用していることを示しています。あなたはどうですか?
他のヒント
PyQtを使った経験はありませんが、ここでスーパークラスのコンストラクターを呼び出すことを忘れていませんか?
class MyWidget(QtGui.QWidget):
def __init__(self):
# Where is the call to QtGui.QWidget's init ?
pass
所属していません StackOverflow