PyQt5 中的 Tkinter window、按钮和显示 HTML 页面

Tkinter window, button and display HTML page in PyQt5

大家好 morning/evening,我正在尝试使用 Tkinter 创建 GUI 并在单击 Tkinter 按钮后使用 PyQt5.QtWebEngineWidgets 显示 HTML 页面。一切正常,但在关闭 PyQt HTML 页面并再次单击按钮后 - 一切都冻结并且内核正在重新启动。

我post最重要的代码如下:

import tkinter as tk    

window = tk.Tk()
btn = tk.Button(window, text = "Click me!",  command = display_HTML)
btn.place(relx=0.2, rely=0.6, anchor="center")
window.mainloop()

和display_HTML函数:

from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
import sys

def display_HTML():
    app = QApplication(sys.argv)
    
    br = QWebEngineView()
    file_path = r"C:\....html"
    local_url = QUrl.fromLocalFile(file_path)
    br.load(local_url)
    
    br.setWindowTitle("HTML content")
    br.show()
    
    app.exec_()       

你能帮我解决这个问题吗?非常感谢。

注意:当我按下按钮并启动 HTML 查看器时,我观察到包含该按钮的 window 冻结(要检查这一点,请尝试更改 window),并且当再次启动 HTML 查看器时,出现 分段错误(核心已转储)

2 个事件循环(tkinter 和 Qt)不能在同一个线程中共存,因为它们被阻塞了,所以一个可能的解决方案是在新进程中启动 Qt:

import tkinter as tk
from multiprocessing import Process

window = tk.Tk()
btn = tk.Button(
    window, text="Click me!", command=lambda *args: Process(target=display_HTML).start()
)
btn.place(relx=0.2, rely=0.6, anchor="center")
window.mainloop()