Python 如何在PyQt5中使用webEngineView.setHtml两次?

Python 如何在PyQt5中使用webEngineView.setHtml两次?,python,pyqt5,Python,Pyqt5,我的窗口中有一个html页面,我想在线程运行完成后显示另一个页面。问题是,当线程完成时,它会使窗口崩溃。那么我的问题是,是否可以在不破坏应用程序的情况下运行webEngineView.setHtml两次 import threading, sys from PyQt5.QtWidgets import * from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5 import QtTest class win(QMainWin

我的窗口中有一个html页面,我想在线程运行完成后显示另一个页面。问题是,当线程完成时,它会使窗口崩溃。那么我的问题是,是否可以在不破坏应用程序的情况下运行webEngineView.setHtml两次

import threading, sys
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5 import QtTest

class win(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(win, self).__init__(*args, **kwargs)
        self.webEngineView = QWebEngineView(self)
        self.page()

        def update():
            QtTest.QTest.qWait(2000)
            self.page1()

        threading.Thread(target=update, daemon=True).start()

    def page(self):

        h1 = '''
        <html>
        <body>
        '''
        var = "text"
        h2 = '''
        </body>
        </html>'''

        self.webEngineView.setHtml(h1+var+h2)

    def page1(self):
        h1 = '''
        <html>
        <body>
        '''
        var = "updated text"
        h2 = '''
        </body>
        </html>'''

        self.webEngineView.setHtml(h1+var+h2)

app = QApplication(sys.argv)
w = win()
w.show()
sys.exit(app.exec_())
导入线程,系统 从PyQt5.QtWidgets导入* 从PyQt5.QtWebEngineWidgets导入QWebEngineView 从PyQt5导入QtTest 班级胜利(QMainWindow): 定义初始化(self,*args,**kwargs): 超级(胜利,自我)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu self.webEngineView=QWebEngineView(self) self.page() def update(): QTest.QTest.qWait(2000) self.page1() threading.Thread(target=update,daemon=True).start() def页面(自我): h1=''' ''' var=“text” h2=''' ''' self.webEngineView.setHtml(h1+var+h2) def第1页(自我): h1=''' ''' var=“更新的文本” h2=''' ''' self.webEngineView.setHtml(h1+var+h2) app=QApplication(sys.argv) w=win() w、 show() sys.exit(app.exec_())
已经在无数的帖子中指出,GUI不应该从另一个线程进行修改,显然您正在尝试这样做。解决方案总是遵循同样的路径:使用信号

导入系统 导入线程 从PyQt5.QtCore导入pyqtSignal、QObject、QThread 从PyQt5.QtWidgets导入QApplication,QMainWindow 从PyQt5.QtWebEngineWidgets导入QWebEngineView def page(): h1=”“” """ var=“text” h2=”“” """ 返回h1+var+h2 def page1(): h1=”“” """ var=“更新的文本” h2=”“” """ 返回h1+var+h2 班级工作人员(QObject): htmlChanged=pyqtSignal(str) def执行(自我): threading.Thread(target=self.task,daemon=True).start() def任务(自我): QThread.msleep(2*1000) html=page1() self.htmlChanged.emit(html) 班级胜利(QMainWindow): 定义初始化(self,*args,**kwargs): 超级(胜利,自我)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu self.webEngineView=QWebEngineView(self) self.webEngineView.setHtml(page()) 工人=工人(自己) worker.htmlChanged.connect(self.webEngineView.setHtml) worker.execute() app=QApplication(sys.argv) w=win() w、 show() sys.exit(app.exec_())