title: Pyqt5 qthread + signal not working + gui freeze
body: <p>I am trying to make a mailbox checker with <code>imap</code> lib, it work pretty fine with python, queue and multithread without gui.</p>
  
  <p>But when I try to put a gui, every fonction i made, make the gui freeze until finish .</p>
  
  <p>I tried many thing from various doc(add qthread, signal, cursorr etcc) and tutorials none worked for me .</p>
  
  <p>Can someone help me to understand how to set or append a text to a QtextEdit while running a function coz it work only after finish .</p>
  
  <p>Here is my code :</p>
  
  <pre><code>class Checker(QtCore.QThread):
      signal = QtCore.pyqtSignal(object)
  
      def __init__(self, lignesmailtocheck):
          QtCore.QThread.__init__(self)
          self.lignesmailtocheck = lignesmailtocheck
  
      def run(self):
              lignemailtocheck = self.lignesmailtocheck.strip()                        
              maillo, passo = lignemailtocheck.split(":",1)
              debmail, finmail = maillo.split("@",1)
              setimap =["oultook.com:imap-mail.outlook.com", "gmail.com:imap.gmail.com"]
              for lignesimaptocheck in sorted(setimap):
                      ligneimaptocheck = lignesimaptocheck.strip()
                      fai, imap = ligneimaptocheck.split(":",1)                                
                      if finmail == fai:
                              passo0 = passo.rstrip()
                              try :
                                      mail = imaplib.IMAP4_SSL(imap)
                                      mail.login(maillo, passo)
                                      mailboxok = open("MailBoxOk.txt", "a+", encoding='utf-8', errors='ignore')
                                      mailboxok.write(maillo+":"+passo+"\n")
                                      mailboxok.close()
                                      totaly = maillo+":"+passo0+":"+imap                                
                                      print(maillo+":"+passo+"\n")
  
                                      self.send_text.emit(totaly)
                                      time.sleep(1)
                              except imaplib.IMAP4.error:                          
                                             print ("LOGIN FAILED!!! ")
  class Ui_Form(object):
      def setupUi(self, Form):
          Form.setObjectName("Form")
          Form.resize(400, 300)
  
          self.pushButton = QtWidgets.QPushButton(Form)
          self.pushButton.setGeometry(QtCore.QRect(150, 210, 75, 23))
          self.pushButton.setObjectName("pushButton")
          self.pushButton.clicked.connect(self.gogogo)
  
          self.openliste = QtWidgets.QToolButton(Form)
          self.openliste.setGeometry(QtCore.QRect(40, 110, 71, 21))
          self.openliste.setObjectName("openliste")
  
          self.textEdit = QtWidgets.QTextEdit(Form)
          self.textEdit.setGeometry(QtCore.QRect(170, 50, 201, 121))
          self.textEdit.setObjectName("textEdit")
  
          self.progressBar = QtWidgets.QProgressBar(Form)
          self.progressBar.setGeometry(QtCore.QRect(10, 260, 381, 23))
          self.progressBar.setValue(0)
          self.progressBar.setObjectName("progressBar")
  
          self.retranslateUi(Form)
          QtCore.QMetaObject.connectSlotsByName(Form)
  
      def retranslateUi(self, Form):
          _translate = QtCore.QCoreApplication.translate
          Form.setWindowTitle(_translate("Form", "Form"))
          self.pushButton.setText(_translate("Form", "PushButton"))
          self.openliste.setText(_translate("Form", "..."))
  
      def gogogo(self):
  
          mailtocheck = open('File/toCheck.txt', 'r', encoding='utf-8', errors='ignore').readlines()        
          setmailtocheck = set(mailtocheck)
          for lignesmailtocheck in sorted(setmailtocheck):
              checker = Checker(lignesmailtocheck)
  
              thread = QThread()
              checker.moveToThread(thread)
              # connections after move so cross-thread:
              thread.started.connect(checker.run)
              checker.signal.connect(self.checkedok)
              thread.start()
  
      def checkedok(self, data):
          print(data)
          self.textEdit.append(data)
  if __name__ == "__main__":
      app = QtWidgets.QApplication(sys.argv)
      Form = QtWidgets.QWidget()
      ui = Ui_Form()
      ui.setupUi(Form)
      Form.show()
      sys.exit(app.exec_())
  </code></pre>