PyQt4导致QThread错误

6 投票
2 回答
1157 浏览
提问于 2025-04-17 11:01

在使用 PyQt4 4.8.6 的时候,下面的代码会出现一个错误:

QObject::startTimer: QTimer 只能和用 QThread 启动的线程一起使用。

这个错误发生在用 a 作为 QApplication 的变量时,但如果用 cpp(或者其他大多数名字)作为变量,就不会出现这个错误。这是 PyQt4 的一个 bug 还是我漏掉了什么?

#! /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

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

from PyQt4.QtCore import Qt

然后在创建表格视图之后:

tableView.setAttribute(Qt.WA_DeleteOnClose)

我把这些代码加到你的代码里后,就没有出现错误了。

6

这可能不是个真正的错误。

当Python开始关闭的时候,哪些对象会被清理掉的顺序是不可预测的。你看到的错误信息很可能就是这个原因造成的。

这对你的应用程序造成了实际的问题吗?

如果没有,那就随便改个名字,别再想这个事了……

撰写回答