Запуск окна на PyQt5 из Tkinter

Есть Desktop приложение на tkinter, делаю окно для открытия и просмотра email.
В tkinter только html получается просмотреть, а письмо в том виде в котором оно приходит приходится отправлять в браузер.
Я хочу открывать и смотреть почту в своем окне. Решил использовать для этого QWebEngineView из PyQt5, который запускаю из tkinter.
Проблема: Первый раз запускается и отрабатывает как нужно, при повторном запуске, программа полностью вылетает. Пробовал запускать через Thread в отдельном потоке, но результат тот же. Пробовал переименовывать поток, используя random - тоже не помогло.
Выход вижу либо переписывать заново всю прогу на PyQt5, либо сделать отдельное приложение на PyQt и запускать отдельно, но задумка теряется.
Что почитать или в каком направлении идти что бы скрестить все-таки их?

Добавил пример с минимальным кодом при котором воспроизводится проблема

import tkinter as tk
from PyQt5.QtWebEngineWidgets import *
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import *
import sys

class Main(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.init_main()

def init_main(self):
    self.label = tk.Label(self, text='После первого нажатия на кнопку все отрабатывает,\n'
                                     ' потом закрываем окно \n'
                                     'и повторно жмем кнопку и программа рушится\n')
    self.label.pack(side=tk.TOP)
    self.btn = tk.Button(self, text='Нажми меня', command=self.open_read_mail)
    self.btn.pack(side=tk.TOP)

def open_read_mail(self):
    # self.filepath = 'https://www.example.com'  # 'file:///__Страшно_горят_цены_в_21vek___/index.html'
    # web_text = self.filepath
    web = Web()   # web_text
    web.open()


class Web:
    def __init__(self, url='https://www.example.com', title='Входящее сообщение'):
        self.title = title
        self.url = url

def init_child(self):

    self.app = QtWidgets.QApplication(sys.argv)

    self.centralwidget = QtWidgets.QWidget()
    self.centralwidget.setObjectName("centralwidget")
    self.centralwidget.setGeometry(QtCore.QRect(150, 50, 700, 600))

    self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
    self.lineEdit.setGeometry(QtCore.QRect(70, 10, 600, 20))
    self.lineEdit.setObjectName("lineEdit")

    self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
    self.lineEdit_2.setGeometry(QtCore.QRect(70, 40, 600, 20))
    self.lineEdit_2.setObjectName("lineEdit_2")

    self.frame = QtWidgets.QFrame(self.centralwidget)
    self.frame.setGeometry(QtCore.QRect(70, 70, 600, 371))
    self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
    self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
    self.frame.setObjectName("frame")

    self.web = QWebEngineView(self.frame)
    self.web.setWindowTitle(self.title)
    self.web.load(QUrl(self.url))
    self.web.resize(600, 550)

    self.label = QtWidgets.QLabel(self.centralwidget)
    self.label.setGeometry(QtCore.QRect(40, 10, 21, 16))
    self.label.setObjectName("label")

    self.label_2 = QtWidgets.QLabel(self.centralwidget)
    self.label_2.setGeometry(QtCore.QRect(30, 40, 31, 16))
    self.label_2.setObjectName("label_2")

    self.label.setText("От:")
    self.label_2.setText("Тема:")

    qbtn = QtWidgets.QPushButton('Quit', self.centralwidget)
    qbtn.clicked.connect(self.close_window)
    qbtn.resize(qbtn.sizeHint())
    qbtn.move(1, 60)

def close_window(self):
    self.centralwidget.close()
    #sys.exit(0)

def open(self):
    self.init_child()
    self.centralwidget.show()
    self.app.exec()
    #sys.exit()

if __name__ == "__main__":
    root = tk.Tk()
    app = Main(root)
    app.pack()
    root.geometry("400x200+100+100")
    root.resizable(True, True)
    root.mainloop()

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