pyqt5 QWebEngineView 使用多线程刷新本地加载的网页

制作程序时,为了能够实时的更新相应的温度数据(每隔10s)主程序代码

#程序的主线程
class Window_fjg_information(QWidget):
    def __init__(self):
        super(Window_fjg_information,self).__init__()
        self.setupUi()
    def setupUi(self):
        self.setObjectName("self")
        self.resize(1200, 800)
        self.fram_5_information_temp_graph()
        QtCore.QMetaObject.connectSlotsByName(self)
    def fram_5_information_temp_graph(self):
        self.web_show_temp_graph = QWebEngineView(self)#创建web浏览器模块
        self.refresh_temp = Refresh_temp_url() #建立子线程链接
        self.refresh_temp.single_refresh_temp_url.connect(self.refresh_temp_url_2)#链接信号并将数据创给方法refresh_temp_url_2
        self.refresh_temp.start()
    def refresh_temp_url_2(self,path_url):
        self.web_show_temp_graph.load(QUrl.fromLocalFile(path_url))#获得子程序传来的数据,每10s更新一次显示

子程序代码

class Refresh_temp_url(QThread):
    single_refresh_temp_url = pyqtSignal(str)
    def __init__(self):
        super(Refresh_temp_url,self).__init__()
    def run(self):
        while True:
            a = os.path.abspath(os.path.dirname(os.getcwd()))  # 获取上层目录
            self.id_fa = "QJ_01_01"
            self.url_path = str(a) + "/data_db/data_url_temp/{}.html".format(self.id_fa)
            self.single_refresh_temp_url.emit(str(self.url_path ))
            time.sleep(10)

此处使用QThread,加载多线程的方法,使用while 循环,每次返回QWebEngineView读取url的文件地址


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
import sqlite3,json,os,time,threading
#加载url文件相对位置的子线程
class Refresh_temp_url(QThread):
    single_refresh_temp_url = pyqtSignal(str)
    def __init__(self):
        super(Refresh_temp_url,self).__init__()
    def run(self):
        while True:
            a = os.path.abspath(os.path.dirname(os.getcwd()))  # 获取上层目录
            self.id_fa = "QJ_01_01"
            self.url_path = str(a) + "/data_db/data_url_temp/{}.html".format(self.id_fa)
            self.single_refresh_temp_url.emit(str(self.url_path ))
            time.sleep(10)
#程序的主线程
class Window_fjg_information(QWidget):
    def __init__(self):
        super(Window_fjg_information,self).__init__()
        self.setupUi()
    def setupUi(self):
        self.setObjectName("self")
        self.resize(1200, 800)
        self.fram_5_information_temp_graph()
        QtCore.QMetaObject.connectSlotsByName(self)
    def fram_5_information_temp_graph(self):
        self.web_show_temp_graph = QWebEngineView(self)#创建web浏览器模块
        self.refresh_temp = Refresh_temp_url() #建立子线程链接
        self.refresh_temp.single_refresh_temp_url.connect(self.refresh_temp_url_2)#链接信号并将数据创给方法refresh_temp_url_2
        self.refresh_temp.start()
    def refresh_temp_url_2(self,path_url):
        self.web_show_temp_graph.load(QUrl.fromLocalFile(path_url))#获得子程序传来的数据,每10s更新一次显示
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    fjg_gl = Window_fjg_information()
    fjg_gl.show()
    sys.exit(app.exec_())
PyQt5QWebEngineView是一个用于在应用程序中显示HTML内容的组件,它基于Qt的WebEngine模块,提供了一个现代化的浏览器内核。当你通过`QWebEngineView`加载网页后,你可以利用它的事件处理机制来监听用户的交互,比如鼠标点击。 要实现在网页内容上点击并跳转的功能,首先需要创建一个`QWebEnginePage`的实例,并连接到适当的信号。当用户点击网页内容时,`QWebEngineView`会触发`loadFinished`信号,此时你可以检查是否发生了点击事件,如果有的话,可以通过`QWebEngineUrlRequestJob`来设置新的URL地址: ```python from PyQt5.QtCore import QObject, Slot, pyqtSignal from PyQt5.QtWebEngineWidgets import QWebEngineView class WebNavigationHandler(QObject): pageLoaded = pyqtSignal() def __init__(self, view): super().__init__() self.view = view self.view.page().urlChanged.connect(self.handle_url_change) @Slot(QWebEngineUrlRequestJob) def handle_url_change(self, job): if job.error() == QWebEngineUrlRequestJob.NoError and job.succeeded(): self.pageLoaded.emit() # 在这里检查是否有链接被点击 clicked_links = self.view.page().mainFrame().toHtml().find('a') for link in clicked_links: href = link.getAttribute('href') if href != '#': self.view.setUrl(href) # 设置新的URL进行跳转 # 使用示例 view = QWebEngineView() handler = WebNavigationHandler(view) view.load(QUrl('http://example.com')) view.show() # 当页面加载完成并且有链接被点击时,会触发pageLoaded信号 handler.pageLoaded.connect(lambda: print("Page loaded and ready to navigate")) ``` 在这个例子中,我们创建了一个`WebNavigationHandler`类,当页面加载完成后,会发出`pageLoaded`信号。然后,在该信号的槽函数中,我们可以检查并处理网页内的点击事件。如果找到被点击的链接,就使用`setUrl()`方法将QWebEngineView导航到新链接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值