PyQt4导致QThread错误

时间:2012-01-24 22:44:11

标签: python pyqt pyqt4 qthread qtimer

使用PyQt4 4.8.6,下面的代码会产生错误

QObject :: startTimer:QTimer只能用于以QThread启动的线程

当a用作QApplication的变量时,如果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()

2 个答案:

答案 0 :(得分:6)

这可能不是一个错误。

当Python开始关闭时,对象被垃圾收集的顺序可能是不可预测的。您看到的错误消息很可能是副作用。

这是否会导致您的应用程序出现问题?

如果没有,只需重新命名并忘记它......

答案 1 :(得分:0)

您需要将视图设置为在关闭时删除。这只需要在您的应用程序中添加以下两行:

from PyQt4.QtCore import Qt

然后在实例化tableView之后:

tableView.setAttribute(Qt.WA_DeleteOnClose)

当我将这些行添加到您的代码中时,我不会收到错误。