Pyqt4 entraîne une erreur QThread
Question
Utilisation de Pyqt4 4.8.6 Le code ci-dessous produit l'erreur
QObject :: Starttimer: Qtimer ne peut être utilisé qu'avec des threads démarrés avec QThread
Lorsque A est utilisé comme variable pour Qapplication, mais il ne produit pas l'erreur si CPP (ou la plupart des autres) est utilisé pour la variable. Est-ce un bug dans PYQT4 ou y a-t-il quelque chose qui me manque?
#! /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()
La solution
Ce n'est probablement pas un bug, en tant que tel.
Lorsque le Python commence à s'arrêter, l'ordre dans lequel les objets sont collectés aux ordures peuvent être imprévisibles. Le message d'erreur que vous voyez en est probablement un effet secondaire.
Cela cause-t-il un vrai problème dans votre application?
Sinon, renommez simplement le cas échéant et oubliez-le ...
Autres conseils
Vous devez définir la vue sur la suppression lorsqu'elle est fermée. Cela implique simplement d'ajouter les deux lignes suivantes à votre application:
from PyQt4.QtCore import Qt
Et puis après l'instanciation de la table de table:
tableView.setAttribute(Qt.WA_DeleteOnClose)
Lorsque j'ajoute ces lignes à votre code, je n'obtiens pas l'erreur.