QMessageBox在使用线程后不显示文本并冻结GUI

2024-03-28 09:22:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在实现一个线程以防止主GUI在函数过程中冻结之后,我的QmessageBox错误消息显示标题,但不显示文本,并且没有响应。如果单击QmessageBox中的“X”,则主GUI也会无响应。我在其他文章中读到,只有主线程可以调用GUI函数,但我仍然不知道如何实现它。有什么建议吗?我对线程技术非常陌生;这是我使用它的第一个项目。你知道吗

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

注意 这只是一段代码。函数中有多个步骤,其中包含特定于这些步骤的错误消息。我只是举第一个例子。主UI是从不同的.py文件导入的。你知道吗


Tags: 函数textselffalsedefguimsgerror