PyQt:ファイルにダミークラス定義を追加すると、アプリケーションがクラッシュするのはなぜですか?

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

  •  22-07-2019
  •  | 
  •  

質問

以下のコードを検討してください:

 #!/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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top