2009-08-05 13 views
0

は、以下のコードを考えてみましょう: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_()) 

は、[OK]を動作します。 今、私はグローバルスコープ内のダミークラス(つまりQtGuiモジュールのクラスから継承)...

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

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

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

を追加した場合...私は、スクリプトを起動したときに、私はエラーを取得:

TypeError: argument 1 of QMainWindow.setCentralWidget() has an invalid type

このエラーメッセージは、私が行った変更に接続することができないため、わかりにくいです。 このエラーの原因は何ですか?

答えて

1

は、問題を再現することはできません:以下の正確なコードを(もちろん、空のウィンドウを示す)私のためにうまく

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を使用して、私はPyQtはバージョン4.5.1によ

print QtCore.PYQT_VERSION_STR 

ショーを追加しています。あなたはどうですか?

+0

python.orgとPyQt 4.5.2からのPython 2.6.2 ちょうどPython 2.5.4に戻って、それは魅力のように機能します。ありがとう! – kraymer

+0

@kraymer、あなたも大歓迎ですが、最新のPythonが最新のPythonで動作しない場合は面倒です。Python 2.6.2でPyQtを再構築しようとしている時があります。 PyQtのトラッカーのバグ...?) –

0

私は以前にPyQtを使っていませんでしたが、ここでスーパークラスのコンストラクタを呼び出すことを忘れていませんか?報告されたように

class MyWidget(QtGui.QWidget): 
    def __init__(self): 
     # Where is the call to QtGui.QWidget's init ? 
     pass 
+0

結果は同じですが、私はそれを明確にするために私のコードを変更します。 – kraymer