Hello,

is it possible to connect signals from a Widget to a slot in a QThread and 
ensure that the Widget responds to keypress and mouse events?

I attached my first try, but it doesn't work, the UI blocks until the execution 
of the function is finished.

Thanks for your help,
Lukas
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Main(QWidget):
    def __init__(self,  parent=None):
        super(Main,  self).__init__(parent)
        
        # Some widgets to check if the Widget responds to keypress events
        layout = QVBoxLayout()
        btn1 = QPushButton("Push me...",  self)
        txt1 = QTextEdit(self)
        lin1 = QLineEdit(self)
        btn2 = QPushButton("Just testing...",  self)
        
        layout.addWidget(btn1)
        layout.addWidget(txt1)
        layout.addWidget(lin1)
        layout.addWidget(btn2)

        self.setLayout(layout)
        
        self.thread = Thread()
        self.thread.start()
        
        self.connect(btn1,  SIGNAL("clicked()"),  self.thread,  SLOT("long()"))

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

    def run(self):
        # Short running method
        time.sleep(1)
        self.long()
        self.exec_()
    
    @pyqtSignature("")
    def long(self):
        print "Is Thread still running?",  self.isRunning()
        print "starting long running function..."
        time.sleep(4)
        print "ending long running function..."

if __name__ == "__main__":
    app = QApplication([])
    main = Main()
    main.show()
    app.exec_()
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to