Pyside6使用QtWebEngine实现GUI嵌入网页内容

2025-04-27 0 495

Pyside6使用QtWebEngine实现GUI嵌入网页内容

        Pyside6是由Qt官方维护和开发的一个用于创建跨平台桌面应用程序的Python绑定库。QtWebEngine是Qt提供的一个模块,它基于Chromium项目,允许开发者在他们的应用程序中嵌入网页内容。通过结合Pyside6和QtWebEngine,开发者可以轻松地创建具有现代网页浏览功能的桌面应用程序。本文,我将向大家介绍QtWebEngine的使用方法。

PyQt5 Vs Pyside6

        谈到Qt,大家最熟悉的莫过于C++中的Qt了,当然,今天我们在Python中常用的两个Qt库其本身也是C++中Qt的API,运行时需要调用自身的一些dll文件。这里我给大家介绍一下PyQt5与PySide6这两个库的区别。

对比项​ ​PyQt5​ ​PySide6​
​开发公司​ Riverbank Computing Qt 官方 (The Qt Company)
​许可证​ GPL 或商业许可证 LGPL 或商业许可证
​Python 绑定​ 由 Riverbank 维护 由 Qt 官方维护
​Qt 版本支持​ Qt 5 Qt 6
​API 兼容性​ 与 Qt5 完全兼容 与 Qt6 完全兼容
​模块命名​ PyQt5.QtCorePyQt5.QtWidgets PySide6.QtCorePySide6.QtWidgets
​信号与槽语法​ pyqtSignalpyqtSlot SignalSlot
​多线程支持​ 支持 支持
​文档与社区​ 文档丰富,社区活跃 官方文档完善,社区逐渐增长
​商业支持​ 需购买商业许可证 可直接闭源商用
​安装方式​ pip install PyQt5 pip install PySide6
​性能​ 相近 相近
​与 C++ Qt 兼容性​
​未来维护​ 仍活跃,但主要支持 Qt5 Qt 官方维护,未来更倾向 Qt6

        总而言之,Pyside6的LGPL证书允许闭源(LGPL指不修改其dll文件中的底层代码基础上允许闭源),且对于Qt6的支持更先进,大家熟知的Spyder IDE就是基于Pyqt5开发,目前正在逐步完善支持Pyside6。

Pyside6使用QtWebEngine实现GUI嵌入网页内容

Pyside6使用QtWebEngine实现GUI嵌入网页内容

Spyder部分源码 

Pyside 获取方式

pip install PySide6

 QtWebEngine

        QtWebEngine是Qt提供的一个模块,它基于Chromium项目,允许开发者在他们的应用程序中需通过浏览器便可嵌入网页内容,通过结合Pyside6和QtWebEngine,开发者可以轻松地创建具有现代网页浏览功能的桌面应用程序。

        这里我们以嵌入东方财经网的股票指数为例:

思路分析

A股目前最常用的13个股指分别是:

        {'上证指数':'000001','深证成指':'399001','创业板指':'399006',
        '科创50':'000688','中证A50':'930050','中证A500':'000510','沪深300':'000300',
        '中证500':'399905','中证800':'000906','中证1000':'000852','中证2000':'932000',
        '上证50':'000016','北证50':'899050'}

这些股指在东方财富网中,除了中证2000与中证A50外Url都是固定的格式:

"https://quote.eastmoney.com/zs指数股票代码.html#fullScreenChart"

 中证2000与中证A50的Url略有不同:

"https://quote.eastmoney.com/zz/2.指数股票代码.html#fullScreenChart"

https://quote.eastmoney.com/zs000001.html#fullScreenChartPyside6使用QtWebEngine实现GUI嵌入网页内容https://quote.eastmoney.com/zs000001.html#fullScreenChart

Pyside6使用QtWebEngine实现GUI嵌入网页内容

东方财富网上证指数 

 接下来,我们要做的便是根据给定的股指名称将其转换为Url

indexName_to_code={'上证指数':'000001','深证成指':'399001','创业板指':'399006',
        '科创50':'000688','中证A50':'930050','中证A500':'000510','沪深300':'000300',
        '中证500':'399905','中证800':'000906','中证1000':'000852','中证2000':'932000',
        '上证50':'000016','北证50':'899050'}
        
if indexName=='中证A50' or indexName=='中证2000':
    url=f"https://quote.eastmoney.com/zz/2.{indexName_to_code[indexName]}.html#fullScreenChart"
else:
    url=f"https://quote.eastmoney.com/zs{indexName_to_code[indexName]}.html#fullScr

Webbrowser类定义

        接着我们来使用QTwebengine来自定义一个Webbrowser类:

import sys
import os
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtCore import QUrl

class WebBrowser(QMainWindow):
    def __init__(self,indexName):
        super().__init__()
        self.indexName=indexName
        indexName_to_code={'上证指数':'000001','深证成指':'399001','创业板指':'399006',
        '科创50':'000688','中证A50':'930050','中证A500':'000510','沪深300':'000300',
        '中证500':'399905','中证800':'000906','中证1000':'000852','中证2000':'932000',
        '上证50':'000016','北证50':'899050'}
        
        if indexName=='中证A50' or indexName=='中证2000':
            self.url=f"https://quote.eastmoney.com/zz/2.{indexName_to_code[self.indexName]}.html#fullScreenChart"
        else:
            self.url=f"https://quote.eastmoney.com/zs{indexName_to_code[self.indexName]}.html#fullScreenChart"
        self.setup_ui()
    def setup_ui(self):
        self.setWindowTitle(self.indexName)
        self.resize(1024,768)
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout=QVBoxLayout(central_widget)
        layout.setContentsMargins(0, 0, 0, 0)
        try:
            self.webview=QWebEngineView()
            layout.addWidget(self.webview)
            self.webview.setUrl(QUrl(self.url))
        except Exception:#如果没有GPU的话就#强制使用CPU渲染
            os.environ["QT_QUICK_BACKEND"] = "software"  
            os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--disable-gpu --disable-software-rasterizer"
            self.webview=QWebEngineView()
            layout.addWidget(self.webview)
            self.webview.setUrl(QUrl(self.url))
    
    def closeEvent(self, event):
        # 彻底释放资源
        self.webview.stop()
        self.webview.page().profile().clearHttpCache()
        self.webview.setPage(None)
        self.webview.deleteLater()
        QApplication.processEvents()  
        event.accept()

接着,我们需要按照规范的格式来启动Qt程序

def open_kline_window(index_name):
    if not QApplication.instance():
        qt_app=QApplication(sys.argv)
    # 创建并显示K线窗口
    current_qt_window=WebBrowser(index_name)
    current_qt_window.show()
    qt_app.exec()

完整代码

import sys
import os
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtCore import QUrl

class WebBrowser(QMainWindow):
    def __init__(self,indexName):
        super().__init__()
        self.indexName=indexName
        indexName_to_code={'上证指数':'000001','深证成指':'399001','创业板指':'399006',
        '科创50':'000688','中证A50':'930050','中证A500':'000510','沪深300':'000300',
        '中证500':'399905','中证800':'000906','中证1000':'000852','中证2000':'932000',
        '上证50':'000016','北证50':'899050'}
        
        if indexName=='中证A50' or indexName=='中证2000':
            self.url=f"https://quote.eastmoney.com/zz/2.{indexName_to_code[self.indexName]}.html#fullScreenChart"
        else:
            self.url=f"https://quote.eastmoney.com/zs{indexName_to_code[self.indexName]}.html#fullScreenChart"
        self.setup_ui()
    def setup_ui(self):
        self.setWindowTitle(self.indexName)
        self.resize(1024,768)
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout=QVBoxLayout(central_widget)
        layout.setContentsMargins(0, 0, 0, 0)
        try:
            self.webview=QWebEngineView()
            layout.addWidget(self.webview)
            self.webview.setUrl(QUrl(self.url))
        except Exception:#如果没有GPU的话就#强制使用CPU渲染
            os.environ["QT_QUICK_BACKEND"] = "software"  
            os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--disable-gpu --disable-software-rasterizer"
            self.webview=QWebEngineView()
            layout.addWidget(self.webview)
            self.webview.setUrl(QUrl(self.url))
    
    def closeEvent(self, event):
        # 彻底释放资源
        self.webview.stop()
        self.webview.page().profile().clearHttpCache()
        self.webview.setPage(None)
        self.webview.deleteLater()
        QApplication.processEvents()  
        event.accept()

def open_kline_window(index_name):
    if not QApplication.instance():
        qt_app=QApplication(sys.argv)
    # 创建并显示K线窗口
    current_qt_window=WebBrowser(index_name)
    current_qt_window.show()
    qt_app.exec()
open_kline_window('上证指数')

运行结果

Pyside6使用QtWebEngine实现GUI嵌入网页内容

平台声明:以上文章转载于《CSDN》,文章全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,仅作参考。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_73953650/article/details/147075616

遇见资源网 前端 Pyside6使用QtWebEngine实现GUI嵌入网页内容 http://www.ox520.com/157301.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务