PyQt4导致QThread错误
在使用 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开始关闭的时候,哪些对象会被清理掉的顺序是不可预测的。你看到的错误信息很可能就是这个原因造成的。
这对你的应用程序造成了实际的问题吗?
如果没有,那就随便改个名字,别再想这个事了……