threading, qt, and the freakout

Ben Floyd even at pondie.com
Mon Nov 29 22:28:11 EST 2004


Hey everyone,

Why doesn't this work? The code speaks much more clearly than I do,
so i shortened it and pasted it below.  Running this
and clicking on 'Break Me' will... freak out the window...

But... only when the pushbutton_obj.setText("Updated") line
is in the thread. If I comment out the threading code
and uncomment the line below "#WORKS", the button text
updates fine. But in the thread it breaks...

I feel like I'm being stupid here, so ANY suggestions are
much appreciated.

Thanks all.
Ben Floyd
even at pondie.com


#############CUT#############
from qt import *
import sys
import threading

class Form1(QMainWindow):
    def __init__(self,parent = None,name = None,fl = 0):
        QMainWindow.__init__(self,parent,name,fl)
        self.setCentralWidget(QWidget(self,"qt_central_widget"))
        self.pushButton1 = QPushButton(self.centralWidget(),"pushButton1")
        self.pushButton1.setText("Break Me")
        self.connect(self.pushButton1,SIGNAL("clicked()"),self.doSomething)

    def doSomething(self):
        a = DoStuff()
        a.go(self.pushButton1)

class DoStuff:
    def go(self, pushbutton_obj):
        def runThread():
            #DOESNT WORK
            pushbutton_obj.setText("Updated")

        go = threading.Thread(target=runThread)
        go.start()
        
        #WORKS
        #pushbutton_obj.setText("Updated")
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    f = Form1()
    f.show()
    app.setMainWidget(f)
    app.exec_loop()



More information about the Python-list mailing list