2012-11-26 5 views
10

Wenn (und nur wenn) ich meine Anwendung zu beenden, diese (und nur diese) wiederholte Meldung erscheint auf der Eingabeaufforderung:Warum bekomme ich "QTimer kann nur mit Threads gestartet mit QThread" Nachrichten verwendet werden, wenn ich keinen QTimer in meinem Code habe?

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 

Das ist für mich sehr seltsam, weil ich nie QTimer in meinem Code verwenden (oder QThread). In der Tat, keine Fehler oder Abstürze passieren mit der Anwendung, so ist dies eigentlich kein echtes Problem. Dies geschieht sowohl in Windows- als auch in Linux-Betriebssystemen. meine Importe

Alle:

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 

Die Hauptfunktion:

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

Vielleicht könnte es etwas im Zusammenhang mit QFileSystemWatcher (verwendet von QFileSystemModel) sein, ich denke ... vielleicht nutzt es einige QTimer Eigenschaften.

+0

können Sie weisen darauf hin, auf welche Zeile des Codes diese Nachrichten verursacht werden? – Kai

+0

Absolut nicht, diese 2 oder 3 wiederholten Zeilen sind die einzigartigen Informationen, die mir gegeben werden !!! : - |. – iacopo

+0

Versuchen Sie, eine Konsolenausgabe hinzuzufügen, um die verursachende Codezeile zu finden. – Kai

Antwort

10

Ich hatte in der Vergangenheit ähnliche Probleme.

Die QFileSystemModeldocumentation page sagt der folgende:

QFileSystemModel.__init__ (self, QObject parent = None)

Das übergeordnete Argument, wenn auch nicht ohne, verursacht selbst von Qt statt PyQt besessen werden.

Konstruiert ein Dateisystemmodell mit dem angegebenen übergeordneten Element.

Wenn Sie nicht über ein parent Argument dann der Garbage Collector Python passieren kann das Objekt zur falschen Zeit und als Nebeneffekt löschen erhöhen den Fehler, den Sie erwähnen. Mein Rat ist, sicherzustellen, dass Ihre Objekte einen richtigen Elternteil haben. Ich denke, es sollte das Problem beheben.

PS: Ich habe die Dokumente für jede verwendete Klasse nicht überprüft. Vielleicht ist QFileSystemModel nicht die einzige Klasse, auf der dieses Ding passiert.

+0

Ich habe das gleiche Problem mit der '' QCompleter'' Klasse – chip

3

Meiner Erfahrung nach geschieht dies, wenn ich eine Qt-Klasse unterklassiere und eines der Mitglieder der Unterklasse nicht Teil der Qt-Hierarchie ist. Zum Beispiel:

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

Wenn ich MyWidget auf diese Weise implementieren, es gibt mir die QTimer Fehler, wenn das Objekt zerstört wird:

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

Wenn jedoch MyWidget erbt von QObject dann kein Fehler auftritt:

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