QObject::setParent: Cannot set parent, new parent is in a different thread

Появляется ошибка при появлении нового письма. Я создаю почтовый сервис рандомных почт на базе mail.tm, после получения письма на почту выходит ошибка QObject::setParent: Cannot set parent, new parent is in a different thread, я понимаю что вероятнее всего ошибка из-за того что я использую потоки, но не знаю как ее решить. Вот сам код:

import sys
import typing
from mailtm import Email
import os
import requests
import json
import threading
import time
import shutil


from PyQt5 import QtCore, uic
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWidgets import (QWidget, QSlider, QLineEdit, QLabel, QPushButton, QScrollArea,QApplication,
                             QHBoxLayout, QVBoxLayout, QMainWindow)
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Temp_Mail(object):
    def setupUi(self, Temp_Mail):
        Temp_Mail.setObjectName("Temp_Mail")
        Temp_Mail.resize(1280, 720)
        Temp_Mail.setInputMethodHints(QtCore.Qt.ImhNone)
        self.centralwidget = QtWidgets.QWidget(Temp_Mail)
        self.centralwidget.setObjectName("centralwidget")
        self.textBrowser = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(330, 60, 941, 641))
        font = QtGui.QFont()
        font.setFamily("Monaco")
        self.textBrowser.setFont(font)
        self.textBrowser.setAccessibleName("")
        self.textBrowser.setStyleSheet("border: 2px, solid black")
        self.textBrowser.setObjectName("textBrowser")
        self.Inbox_text = QtWidgets.QLabel(self.centralwidget)
        self.Inbox_text.setGeometry(QtCore.QRect(0, 10, 321, 51))
        font = QtGui.QFont()
        font.setFamily("Monaco")
        font.setPointSize(25)
        self.Inbox_text.setFont(font)
        self.Inbox_text.setToolTip("")
        self.Inbox_text.setStyleSheet("")
        self.Inbox_text.setAlignment(QtCore.Qt.AlignCenter)
        self.Inbox_text.setObjectName("Inbox_text")
        self.RefreshButton = QtWidgets.QPushButton(self.centralwidget)
        self.RefreshButton.setGeometry(QtCore.QRect(1180, 0, 71, 61))
        font = QtGui.QFont()
        font.setFamily("Monaco")
        font.setPointSize(40)
        self.RefreshButton.setFont(font)
        self.RefreshButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.RefreshButton.setStyleSheet("border-radius: 0px;")
        self.RefreshButton.setObjectName("RefreshButton")
        self.too_fast_label = QtWidgets.QLabel(self.centralwidget)
        self.too_fast_label.setGeometry(QtCore.QRect(1070, 10, 131, 31))
        font = QtGui.QFont()
        font.setFamily("Monaco")
        font.setPointSize(20)
        font.setBold(True)
        font.setItalic(False)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.too_fast_label.setFont(font)
        self.too_fast_label.setStyleSheet("color: red;")
        self.too_fast_label.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
        self.too_fast_label.setObjectName("too_fast_label")
        self.message_button = QtWidgets.QPushButton(self.centralwidget)
        self.message_button.setGeometry(QtCore.QRect(310, 340, 251, 61))
        font = QtGui.QFont()
        font.setFamily("Monaco")
        self.message_button.setFont(font)
        self.message_button.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.message_button.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.message_button.setStyleSheet("")
        self.message_button.setText("")
        self.message_button.setObjectName("message_button")
        self.scroll = QtWidgets.QScrollArea(self.centralwidget)
        self.scroll.setGeometry(QtCore.QRect(30, 60, 261, 631))
        font = QtGui.QFont()
        font.setFamily("Monaco")
        self.scroll.setFont(font)
        self.scroll.setWidgetResizable(False)
        self.scroll.setObjectName("scroll")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 259, 629))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scroll.setWidget(self.scrollAreaWidgetContents)
        self.copy_button = QtWidgets.QPushButton(self.centralwidget)
        self.copy_button.setGeometry(QtCore.QRect(340, 10, 671, 41))
        font = QtGui.QFont()
        font.setFamily("Monaco")
        font.setPointSize(25)
        self.copy_button.setFont(font)
        self.copy_button.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.copy_button.setToolTip("")
        self.copy_button.setToolTipDuration(-1)
        self.copy_button.setWhatsThis("")
        self.copy_button.setAccessibleName("")
        self.copy_button.setAccessibleDescription("")
        self.copy_button.setStyleSheet("*{\n"
"    background-color: rgba(10, 0, 0, 0);\n"
"}\n"
"*:hover{\n"
"    color:blue;\n"
"}")
        self.copy_button.setText("")
        self.copy_button.setObjectName("copy_button")
        Temp_Mail.setCentralWidget(self.centralwidget)

        self.retranslateUi(Temp_Mail)
        QtCore.QMetaObject.connectSlotsByName(Temp_Mail)

    def retranslateUi(self, Temp_Mail):
        _translate = QtCore.QCoreApplication.translate
        Temp_Mail.setWindowTitle(_translate("Temp_Mail", "Temp_Mail"))
        self.Inbox_text.setText(_translate("Temp_Mail", "?Inbox messages:"))
        self.RefreshButton.setToolTip(_translate("Temp_Mail", "Get new mail"))
        self.RefreshButton.setText(_translate("Temp_Mail", "?"))
        self.too_fast_label.setText(_translate("Temp_Mail", "Too fast!"))


class MainWindow(QMainWindow, Ui_Temp_Mail):
    def __init__(self):
        self.clear_cache()
        super().__init__()
        self.setupUi(self)
        self.too_fast_label.setText('')
        self.mail = Email()
        self.mail.register(password="nonepassword")
        param = {
            "address": self.mail.address,
            "password": "nonepassword"
            }
        r = requests.post('https://api.mail.tm/token', json=param)
        x = json.dumps(r.json())
        y = json.loads(x)
        self.copy_button.setText(self.mail.address)
        self.proc_exec = False
        self.message_count = 0
        self.check_proccess = threading.Thread(target=self.check_messages, args=(self.mail.address,), daemon=True)
        self.check_proccess.start()
        self.message_button.clicked.connect(lambda: self.show_message('test.html'))
        self.copy_button.clicked.connect(self.copy)
        self.copy_button.setToolTip('Click To Copy!?')
        self.RefreshButton.clicked.connect(self.refresh)
        self.widget = QWidget()                 
        self.vbox = QVBoxLayout()
        self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scroll.setWidgetResizable(True)
        self.scroll.setWidget(self.widget)  
    
    def check_messages(self, mail):
        while True:
            if self.proc_exec == False:
                address = mail
                param = {
                        "address": address,
                        "password": "nonepassword"
                    }
                r = requests.post('https://api.mail.tm/token', json=param)
                x = json.dumps(r.json())
                y = json.loads(x)
                header = {
                    "authorization": f'Bearer {y["token"]}'
                }
                r = requests.get('https://api.mail.tm/messages', headers=header)
                mails = json.loads(r.text)
                if str(mails['hydra:member']) != '[]':
                    if self.message_count != len(mails['hydra:member']):
                        between = len(mails['hydra:member']) - self.message_count
                        for message in range(0, between):
                            id = mails['hydra:member'][message]['id']
                            r = requests.get(f'https://api.mail.tm/messages/{id}', headers=header)
                            x = json.dumps(r.json())
                            y = json.loads(x)
                            html = '<HTML><BODY><meta charset="utf-8">' + str(y['html'][0])[y['html'][0].find('<BODY>') + 6:]
                            with open(f'cache/{self.message_count + 1}.html', 'w') as f:
                                f.write(html)
                            self.object = QPushButton(self)
                            self.object.setText(str(self.message_count + 1))
                            self.object.clicked.connect(lambda: self.show_message(str(self.message_count + 1) + '.html'))
                            self.object.move(50, 50)
                        self.message_count += between
                else:
                    pass
            else:
                break
            time.sleep(5)


    def show_message(self, file_name):
        html_file = open('test.html', encoding='utf-8')
        path = os.path.abspath(file_name)
        print(path)
        self.textBrowser.setUrl(QUrl(f'file:{path}'))
        html_file.close()

    def refresh(self):
        try:
            self.too_fast_label.setText('')
            self.mail = Email()
            self.mail.register(password="nonepassword")
            param = {
                "address": self.mail.address,
                "password": "nonepassword"
                }
            r = requests.post('https://api.mail.tm/token', json=param)
            x = json.dumps(r.json())
            y = json.loads(x)
            self.label.setText(self.mail.address)
        except Exception:
            self.too_fast_label.setText('Too fast!')
        self.clear_cache()

    def copy(self):
        cb = QApplication.clipboard()
        cb.clear()
        cb.setText(self.mail.address)
    
    def clear_cache(self):
        shutil.rmtree('cache')
        os.mkdir('cache')

    def close(self):
        app.exec_()
        self.proc_exec = True
        self.clear_cache()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(ex.close())


Ответы (0 шт):