zoukankan      html  css  js  c++  java
  • 内嵌web浏览器

    有时候,我们需要在程序中嵌入浏览器,显示一个指定的网页。

    Qt5中,有一个 QtWebEngineWidgets 模块,通过它,可以启动基于Chromium的浏览器(和chrome是同样的内核)进程,并且把web界面内嵌入 Qt程序中。

    参考官网说明

    案例

    我们可以实现一个内嵌浏览器,打开白月黑羽网站。

    整个案例的参考代码,点击这里下载

    链接:https://pan.baidu.com/s/1FBLdSU0w_LYSsPUzVjsQsA 提取码:byhy

    首先使用Qt designer设计界面。

    注意:显示web内容的是 QtWebEngineWidgets 模块里面的 QWebEngineView类。

    所以需要 premote 一个QtWindget 控件为 QWebEngineView。详见参考代码中的ui文件。

    创建完界面后,使用命令

    pyside2-uic main.ui > ui_main.py


    把界面定义转化为Python代码。

    然后,编写如下代码,使用 QWebEngineView 打开网址

    from PySide2.QtWidgets import QApplication,QMainWindow
    from ui_main import Ui_MainWindow
    
    class MainWindow(QMainWindow):
    
        def __init__(self):
            super().__init__()
            # 使用ui文件导入定义界面类
            self.ui = Ui_MainWindow()
            # 初始化界面
            self.ui.setupUi(self)
    
            # 使用界面定义的控件,也是从ui里面访问
            self.ui.webview.load('http://www.baidu.com/')
    
    app = QApplication([])
    mainw = MainWindow()
    mainw.show()
    app.exec_()


    上述代码的一个问题,就是不能打开新标签页,如果要支持,可以使用QTabWidget。参考代码如下

    from PySide2.QtCore import *
    from PySide2.QtWidgets import *
    from PySide2.QtWebEngineWidgets import *
    
    class TabWidget(QTabWidget):
        def __init__(self, *args, **kwargs):
            QTabWidget.__init__(self, *args, **kwargs)
            url = QUrl("https://www.163.com")
            view = HtmlView(self)
            view.load(url)
            ix = self.addTab(view, "加载中 ...")
            self.resize(800, 600)
    
    class HtmlView(QWebEngineView):
        def __init__(self, *args, **kwargs):
            QWebEngineView.__init__(self, *args, **kwargs)
            self.tab = self.parent()
    
        def createWindow(self, windowType):
            if windowType == QWebEnginePage.WebBrowserTab:
                webView = HtmlView(self.tab)
                ix = self.tab.addTab(webView, "加载中 ...")
                self.tab.setCurrentIndex(ix)
                return webView
            return QWebEngineView.createWindow(self, windowType)
    
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        main = TabWidget()
        main.show()
        sys.exit(app.exec_())
    天道酬勤 循序渐进 技压群雄
  • 相关阅读:
    Error-Project facet Java version 1.8 is not supported
    如何运行Struts2官网最新Demo?
    Java计算两个字符串日期之间的天数差
    Mybatis XML配置
    使用本地缓存快还是使用redis缓存好?
    mysql数据统计技巧备忘录
    java中的全局变量如何实现?ThreadLocal~
    干货!一次kafka卡顿事故排查过程
    《Java 多线程编程核心技术》- 笔记
    《分布式服务框架原理与实践》- 总结一下吧
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/14758516.html
Copyright © 2011-2022 走看看