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()
大家好 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()