2015-09-02 25 views
6

Soru için üzgünüm ama bir sürü şey okudum ve zamanlayıcıyı nasıl yapacağımı bilmiyorum. Bu yüzden kodumu gönderiyorum: her 200 ms'de nesneyi hedefe doğru hareket ettirmeye çalışıyorum. Ben öz olmadan çalıştı o bana aynı hataları veriyor:PyQt4 - bir zamanlayıcı yaratma

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' 

nasıl argümanlarla bir işleve zamanlayıcı bağlamak için hiçbir fikrim yok. SLOT argümanını doğru kullanmadığımı düşünmüştüm ama bana bu mystakes verdi. Sanırım her şey yanlış. Bir kaç yardım için minnettarım:

cevap

10

Yeni stil sinyalleri kullanın, daha kolay anlaşılırlar.

Swap -

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

ile -

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

çalışan bir zamanlayıcı basit ama tam bir örnek -

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

Denedim ama hatta move_towards içine almaz, daha sonra "timer.timeout.connect (func)" ile denedim ama işe yaramadı. Ben QtCore.QTimer.singleShot (200, func) 'ı denediğimde çalışır, ancak bir hamle yapar ve durur. – vixenn

+1

Tam bir örnek içerecek şekilde düzenlenmiştir –

+1

Sizin için uygun değilse, saklanan zamanlayıcıya yapılan atlamanın çöp toplanıp toplanmadığından emin olun ve bir widget'ı zamanlayıcıya geçirerek kapsamdan çıkarken zamanından önce çöp toplanmasını engellemelidir. – kmcguire