PyQt4 приводит к ошибке QThread - PullRequest
       45

PyQt4 приводит к ошибке QThread

6 голосов
/ 25 января 2012

При использовании 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 ]

6 голосов
/ 25 января 2012

Это, вероятно, не ошибка, как таковая.

Когда Python начинает закрываться, порядок, в котором объекты собирают мусор, может быть непредсказуемым.Скорее всего, сообщение об ошибке, которое вы видите, является побочным эффектом.

Это вызывает реальную проблему в вашем приложении?

Если нет, просто переименуйте его и забудьте об этом...

0 голосов
/ 13 декабря 2015

Вам необходимо установить вид для удаления, когда он закрыт. Это просто влечет за собой добавление следующих двух строк в ваше приложение:

from PyQt4.QtCore import Qt

и затем после создания экземпляра tableView:

tableView.setAttribute(Qt.WA_DeleteOnClose)

Когда я добавляю эти строки в ваш код, я не получаю сообщение об ошибке.

...