QMessageBox не отображает текст и останавливает графический интерфейс после использования потоков - PullRequest
0 голосов
/ 29 января 2019

После реализации потока для предотвращения зависания основного графического интерфейса во время процесса функции в моих сообщениях об ошибках QmessageBox отображается заголовок, но не текст, и он перестает отвечать на запросы.Если щелкнуть «X» в QmessageBox, основной графический интерфейс пользователя также перестает отвечать на запросы.Я читал в других постах, что только основной поток может вызывать функции графического интерфейса, но я все еще не уверен, как это реализовать.Любой совет?Я очень плохо знаком с потоками;это первый проект, с которым я его использовал.

class myMainWindow(QtWidgets.QMainWindow, Ui_L3TServiceDeskAssistant):
    processing = False
    def __init__(self, parent=None):
    #init stuff here
    def generateToken_click(self):
        if not self.processing:
            self.processing = True
            threading.Thread(target=self.generateToken_thread).start()

    def generateToken_thread(self):
        while True:
            try:
                username = self.txtUsername.text()
                password = self.txtPassword.text()
                HDusername = self.txtHDEmail.text()
                UPN = self.txtUPN.text()
                #domain changed for privacy purposes
                UPNCheck=['.123.com','.321.com']
                if UPN[-8:] in UPNCheck:
                    pass
                else:
                    self.txtUPN.setText("")
                    error_msg = QMessageBox()
                    error_msg.setWindowTitle("User Error")
                    error_msg.setText('Invalid UPN. Please try again.')
                    error_msg.exec()
                    self.processing = False
                    return False

              #other steps in the function here

             except:
                error_msg = QMessageBox()
                error_msg.setWindowTitle("User Error")
                error_msg.setText('Error. Please try again.')
                error_msg.setDefaultButton(QMessageBox.Ok)
                error_msg.exec()
                self.txtUPN.setText("")
                self.processing = False
                return False

Примечание Это всего лишь фрагмент кода.В функции есть несколько шагов с сообщениями об ошибках, относящимися к этим шагам.Я просто показываю первый в качестве примера.Основной интерфейс импортируется из другого файла .py.

...