在实现防止主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文件导入的。