[PyQt] how to set up a timer to call a method after a delay?

Steve Castellotti sc at puzzlebox.info
Thu Jul 1 01:53:38 BST 2010


On Wed, 2010-06-30 at 18:19 +0100, Phil Thompson wrote: 
> > self.timer = QtCore.QTimer()
> > self.timer.connect(self.timer, QtCore.SIGNAL("timeout()"),
> > self.sendData)
> > self.timer.start(1000) # 1 second
> > 
> >     ...but received an exception that "QTimer can only be used with
> > threads started with QThread" which leads me to believe I will need to
> > implement threading for my server (also I expected to need to send
> > "parent=self" when instantiating the QTimer object so I know I must be
> > doing something wrong).
> 
> QTimer.singleShot(1000, self.sendData)
> 
> ...is the normal way of doing it.

    Yes and thank you, that gets me closer to the style I was using
under Twisted, however, with my code looking like this:

self.timer = QtCore.QTimer.singleShot(1000, self.sendData)


    I'm still getting this error:

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


    Comparing to an example I found online here:

http://www.rkblog.rk.edu.pl/w/p/qtimer-making-timers-pyqt4/


    The main difference that I can see is that example is using
QApplication to start up, whereas I am only running from the console (no
Gui at this point).

That said, QApplication inherits from QCoreApplication, which inherits
from QObject. QThread also inherits form QObject, but there's nothing
obvious I see that would indicate QApplication inherits from QThread
directly. Is there some other component related to Gui applications
which are creating QThreads which I need to replicated?

I tried setting up my program to inherit from QtCore.QThread just to see
if that would cover it, but no joy.

Do I need to re-code my program to open each connection as distinct
objects in dedicated threads and perform the timers within those
objects, or again is there something simple and obvious which I am just
missing?


Cheers

Steve Castellotti





More information about the PyQt mailing list