2012-01-24 11 views
6

Uso PyQt4 4.8.6 il codice seguente genera l'errorePyQt4 Risultati in errore QThread

QObject :: startTimer: QTimer può essere utilizzato solo con thread iniziati con QThread

quando viene utilizzato come variabile per QApplicazione, ma non genera l'errore se cpp (o quasi tutto) viene utilizzato per la variabile. Si tratta di un bug in PyQt4 o c'è qualcosa che mi manca?

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

risposta

6

Probabilmente non è un bug, in quanto tale.

Quando Python inizia a spegnersi, l'ordine in cui gli oggetti vengono raccolti dalla garbage collection può essere imprevedibile. Il messaggio di errore che stai vedendo è molto probabilmente un effetto collaterale di quello.

Ciò causa un problema reale nell'applicazione?

In caso contrario, basta rinominare a seconda dei casi e non pensarci più ...

+0

Non è un problema, ma volevo capire cosa sta succedendo. – MES

+0

Ho lo stesso problema, è possibile rimuovere tali messaggi di errore dalla console? –

+0

E 'possibile cancellare manualmente il thread per evitare questi messaggi di errore ?? –

0

È necessario impostare la vista da eliminare quando è chiuso. Questo solo comporta l'aggiunta di queste due righe alla vostra applicazione:

from PyQt4.QtCore import Qt 

e poi, dopo la tableView è istanziato:

tableView.setAttribute(Qt.WA_DeleteOnClose) 

Quando aggiungo quelle linee per il codice non ottengo l'errore.