PyQt4 QThread - passing arguments to thread methods

nganon tj nganon at gmail.com
Thu May 27 16:58:43 EDT 2010


Hi,
I am trying to figure out how to implement a  QThread class that
will handle GUI event while keeping the GUI responsive.

I want to call thread's methods by their names and start() the
thread from inside that method.
My problem is with passing methods their arguments since
start() wont take any argument.

So I thought I could keep a global variable self.invoker which
holds the name of currently called method and start the thread
accordingly as follows:

class Counter(QThread):
    def __init__(self, parent=None):
        super(Counter, self).__init__(parent)
        self.reset()

    def __del__(self):
        self.exiting = True
        self.wait()
        try:
            self.reset()
        # is not instantiated
        except TypeError:
            return

    def stop(self):
        self.__del__()

    def reset(self):
        self.exiting = False

    def countup(self, till):
        if not self.isRunning():
            self.invoker = [self.countup, till]
            self.start()

        else:
            n = 0
            while not self.exiting and n < till:
                n += 1
                self.emit(SIGNAL("ticktock(int)", n))

    def run(self):
        self.invoker[0](self.invoker[1], self.invoker[2])


But I cant always know the number of arguments the invoker has, can I?
So can you please suggest me a better way of doing this please?

Thanks in advance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100527/1dd88dcf/attachment.html>


More information about the Python-list mailing list