2015-09-02 8 views
6

Es tut mir leid für die Frage, aber ich habe eine Menge Dinge gelesen und es scheint, dass ich nicht, wie man einen Timer zu machen. Also poste ich meinen Code:PyQt4 - Erstellen eines Timers

Ich versuche, das Objekt alle 200ms in Richtung Ziel zu bewegen. ich ohne selbst versuchte, es gibt mir die gleichen Fehler:

QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'bytes' 
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'bytes' 
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 2 has unexpected type 'bytes' 

Ich habe keine Ahnung, wie Sie den Timer auf eine Funktion mit Argumenten zu verbinden. Ich dachte, dass ich das SLOT Argument nicht richtig benutze, aber es gab mir diese Mystakes. Ich nehme an, dass alles falsch ist. Ich würde etwas Hilfe schätzen:)

Antwort

10

Verwenden Sie neue Stilsignale, sie sind leichter zu verstehen.

Swap -

QtCore.QTimer.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()")) 

Mit -

timer.timeout.connect(self.move_towards) # assuming that move_towards is the handler 

Ein einfaches, aber vollständiges Beispiel eines Arbeitszeitgeber -

import sys 

from PyQt4.QtCore import QTimer 
from PyQt4.QtGui import QApplication 

app = QApplication(sys.argv) 
app.setQuitOnLastWindowClosed(False) 

def tick(): 
    print 'tick' 

timer = QTimer() 
timer.timeout.connect(tick) 
timer.start(1000) 

# run event loop so python doesn't exit 
app.exec_() 
+0

Ich habe versucht, aber es nicht einmal in move_towards bekommen hat, dann habe ich es mit 'timer.timeout.connect (func)' versucht, aber es hat auch nicht funktioniert. Wenn ich 'QtCore.QTimer.singleShot (200, func)' ausprobiert habe, funktioniert es, aber es macht eine Bewegung und stoppt dann. – vixenn

+1

Bearbeitet, um ein vollständiges Beispiel zu enthalten –

+1

Wenn es für Sie nicht funktioniert, sollten Sie sicherstellen, dass der Verweis auf den gespeicherten Timer nicht Garbage Collected ist und auch ein Widget als Eltern an den Timer übergeben, die vorzeitige Garbage Collection beim Beenden von Scope verhindern soll. – kmcguire

Verwandte Themen