6

PyQt4 4.8.6 を使用すると、以下のコードでエラーが発生します

QObject::startTimer: QTimer は QThread で開始されたスレッドでのみ使用できます

QApplicationの変数としてaが使用されている場合、変数にcpp(または他のほとんどのもの)が使用されている場合、エラーは発生しません。これは PyQt4 のバグですか、それとも何か不足していますか?

#! /usr/bin/env python

# This is only needed for Python v2 but is harmless for Python v3.
import sip
sip.setapi('QVariant', 2)

from PyQt4 import QtGui

#def main():

if __name__ == '__main__':
    import sys

    if len(sys.argv) > 1:
       use_a = False
       print "Don't use a"
    else:
       use_a = True
       print "Use a"

    if use_a:
       a = QtGui.QApplication(sys.argv)
    else:
       cpp = QtGui.QApplication(sys.argv)

    model = QtGui.QStandardItemModel(4,2)
    tableView = QtGui.QTableView()
    tableView.setModel(model)

    tableView.show()
    if use_a:
       sys.exit(a.exec_())
    else:
       sys.exit(cpp.exec_())


#if __name__ == '__main__':
#  main()
4

2 に答える 2

6

それ自体はおそらくバグではありません。

Python がシャットダウンし始めると、オブジェクトがガベージ コレクションされる順序が予測できない場合があります。表示されているエラー メッセージは、おそらくその副作用です。

これはアプリケーションで実際の問題を引き起こしていますか?

そうでない場合は、適切に名前を変更して忘れてください...

于 2012-01-24T23:44:11.870 に答える
0

閉じたときに削除するようにビューを設定する必要があります。これには、次の 2 行をアプリケーションに追加するだけです。

from PyQt4.QtCore import Qt

そして、tableView がインスタンス化された後:

tableView.setAttribute(Qt.WA_DeleteOnClose)

これらの行をコードに追加しても、エラーは発生しません。

于 2015-12-13T18:30:54.477 に答える