2012-11-26 9 views
10

Quando (e solo quando) ho lasciato la mia domanda, questi (e solo questi) un messaggio ripetuto appaiono sul prompt dei comandi:Perché viene visualizzato il messaggio "QTimer può essere utilizzato solo con i thread avviati con QThread" se non ho QTimer nel mio codice?

QObject::startTimer: QTimer can only be used with threads started with QThread 
QObject::startTimer: QTimer can only be used with threads started with QThread 
QObject::startTimer: QTimer can only be used with threads started with QThread 

Questo è abbastanza strano per me, perché io non uso mai QTimer nel mio codice (o QThread). Infatti, nessun errore o crash si verifica usando l'applicazione, quindi questo non è un vero problema, in realtà. Questo accade sia nei sistemi operativi Windows che Linux.

Tutti i miei importazioni:

from __future__ import print_function 
from PyQt4.QtGui import (QApplication, QMainWindow, 
         QFileSystemModel, QTreeView, QTableView, 
         QAbstractItemView, QMenu, QAction, QKeyEvent) 
from PyQt4.QtCore import QDir, Qt, SIGNAL, QString, QFileInfo, QCoreApplication 
import sys 

La funzione principale:

def main(): 
    app = QApplication(sys.argv) 
    app.setApplicationName("QFM") 
    app.setStyle("plastique") 
    gui = MainWindow() 
    gui.show() 
    app.exec_() 

Forse potrebbe essere qualcosa legato alla QFileSystemWatcher (usato da QFileSystemModel), immagino ... forse usa alcune QTimer Caratteristiche.

+0

Puoi indicare su quale riga del tuo codice questi messaggi sono stati causati? – Kai

+0

Assolutamente no, queste 2 o 3 righe ripetute sono le informazioni uniche che mi vengono date !!! : - |. – iacopo

+0

Prova ad aggiungere qualche output della console per trovare la linea di codice che causa. – Kai

risposta

10

Ho avuto problemi simili in passato.

Il QFileSystemModeldocumentation page dice il seguente:

QFileSystemModel.__init__ (self, QObject parent = None)

L'argomento genitore, se non nessuno, fa di sé a essere di proprietà di Qt invece di PyQt.

Costruisce un modello di file system con il genitore specificato.

Se non si passa un argomento parent poi il garbage collector Python può eliminare l'oggetto al momento sbagliato e come effetto collaterale sollevare l'errore si parla. Il mio consiglio è di assicurarmi che i tuoi oggetti abbiano un genitore adatto. Penso che dovrebbe risolvere il problema.

PS: non ho controllato i documenti per ogni classe che si utilizza. Forse QFileSystemModel non è l'unica classe in cui questa cosa accade.

+0

Ho riscontrato lo stesso problema con la classe '' QCompleter'' – chip

3

Nella mia esperienza ciò accade quando sottoclassi una classe Qt e uno dei membri della sottoclasse non fa parte della gerarchia Qt. Per esempio:

class MainWindow(QMainWindow): 
    def __init__(self, *args, **kwargs): 
     super(MainWindow, self).__init__(*args, **kwargs) 
     ... 
     self.my_widget = MyWidget() 
     ... 

Se a implementare MyWidget in questo modo, mi darà l'errore QTimer quando l'oggetto viene distrutto:

class MyWidget(object): 
    def __init__(self): 
     # do stuff 

Tuttavia, se MyWidget eredita da QObject allora si verifica alcun errore:

class MyWidget(QObject): 
    def __init__(self, parent): 
     super(MyWidget, self).__init__(parent) 
     #do stuff 
Problemi correlati