2012-01-24 15 views
6

Korzystanie PyQt4 4.8.6 poniżej kod generuje błądPyQt4 Wyniki w błędzie QThread

QObject :: startTimer: QTimer może być używany tylko z wątki rozpoczęte z QThread

gdy jest używany jako zmiennej dla QApplication, ale nie generuje błędu, jeśli cpp (lub większość cokolwiek innego) jest używana dla zmiennej. Czy jest to błąd w PyQt4, czy jest coś, czego mi brakuje?

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

Odpowiedz

6

Prawdopodobnie nie jest to błąd jako taki.

Gdy Python zaczyna się wyłączać, kolejność, w jakiej obiekty zbierają śmieci, może być nieprzewidywalna. Komunikat o błędzie, który widzisz, jest najprawdopodobniej efektem ubocznym tego.

Czy powoduje to prawdziwy problem w aplikacji?

Jeśli nie, po prostu zmień odpowiednio i zapomnieć o tym ...

+0

To nie jest problem, ale chciałem zrozumieć, co się dzieje. – MES

+0

Mam ten sam problem, czy można usunąć takie komunikaty o błędach z konsoli? –

+0

Czy można ręcznie usunąć wątek, aby zapobiec wyświetlaniu tych komunikatów o błędach? –

0

Musisz ustawić widok do usunięcia po jego zamknięciu. To właśnie powoduje dodanie następujących dwóch linii do aplikacji:

from PyQt4.QtCore import Qt 

a następnie po tableView jest instancja:

tableView.setAttribute(Qt.WA_DeleteOnClose) 

Kiedy dodać te linie do kodu I nie pojawia się błąd.