pyqt5的QWebEngineView 使用模板2 (QTabWidget 改进版)

简介: 说明一对比 QWebEngineView使用模板1,抛弃了创建新窗口的实现方法。而是使用QTabWidget,创建新的tab来实现,这样更加符合浏览器的设计。

说明一

对比 QWebEngineView使用模板1,抛弃了创建新窗口的实现方法。
而是使用QTabWidget,创建新的tab来实现,这样更加符合浏览器的设计。

说明二

QWebEngineView,结合 QTabWidget ,模拟了常规浏览器的简单实现。
本例依旧十分简陋,很多功能并没有进行扩展开发。
抛砖引玉,希望对大家有所帮助。

效果图

img_146661912f958759c87e38a4af6e4234.png

【如下代码,完全复制,直接运行,即可使用】

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
################################################
#######创建主窗口
################################################
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle('My Browser')
        self.showMaximized()
        self.setWindowFlags(Qt.FramelessWindowHint)

        #####创建tabwidget
        self.tabWidget = QTabWidget()
        self.tabWidget.setTabShape(QTabWidget.Triangular)
        self.tabWidget.setDocumentMode(True)
        self.tabWidget.setMovable(True)
        self.tabWidget.setTabsClosable(True)
        self.tabWidget.tabCloseRequested.connect(self.close_Tab)
        self.setCentralWidget(self.tabWidget)

        ####第一个tab
        self.webview = WebEngineView(self)   #self必须要有,是将主窗口作为参数,传给浏览器
        self.webview.load(QUrl("http://www.baidu.com"))
        self.create_tab(self.webview)


    #创建tab
    def create_tab(self,webview):
        self.tab = QWidget()
        self.tabWidget.addTab(self.tab, "新标签页")
        self.tabWidget.setCurrentWidget(self.tab)
        #####
        self.Layout = QHBoxLayout(self.tab)
        self.Layout.setContentsMargins(0, 0, 0, 0)
        self.Layout.addWidget(webview)



    #关闭tab
    def close_Tab(self,index):
        if self.tabWidget.count()>1:
            self.tabWidget.removeTab(index)
        else:
            self.close()   # 当只有1个tab时,关闭主窗口





################################################
#######创建浏览器
################################################
class WebEngineView(QWebEngineView):

    def __init__(self,mainwindow,parent=None):
        super(WebEngineView, self).__init__(parent)
        self.mainwindow = mainwindow


    # 重写createwindow()
    def createWindow(self, QWebEnginePage_WebWindowType):
        new_webview = WebEngineView(self.mainwindow)

        self.mainwindow.create_tab(new_webview)

        return new_webview


################################################
#######程序入门
################################################
if __name__ == "__main__":
    app = QApplication(sys.argv)
    the_mainwindow = MainWindow()
    the_mainwindow.show()
    sys.exit(app.exec_())

本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。

目录
相关文章
|
7月前
|
前端开发 数据可视化 搜索推荐
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
217 0
|
7月前
|
数据可视化 Python
【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互
【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互
149 0
|
10月前
|
XML 编译器 数据库
QT --- VS嵌入QT开发环境搭建
QT --- VS嵌入QT开发环境搭建
139 0
|
11月前
|
Python
Python Tkinter 教程(四)—— 子模块 messagebox、colorchooser 以及 filedialog 的使用及技巧(万字详解)(下)
Python Tkinter 教程(四)—— 子模块 messagebox、colorchooser 以及 filedialog 的使用及技巧(万字详解)(下)
213 0
|
11月前
|
Python
Python Tkinter 教程(四)—— 子模块 messagebox、colorchooser 以及 filedialog 的使用及技巧(万字详解)(上)
Python Tkinter 教程(四)—— 子模块 messagebox、colorchooser 以及 filedialog 的使用及技巧(万字详解)(上)
174 0
|
12月前
|
索引 Python
Python高级进阶#010 pyqt5网格布局QGridLayout
Python高级进阶#010 pyqt5网格布局QGridLayout
188 0
|
机器学习/深度学习 程序员 Python
Python装逼指南——五行代码实现批量抠图
Python装逼指南——五行代码实现批量抠图
451 0
Python装逼指南——五行代码实现批量抠图
Python GUI编程:PySide2页面设计优化
通过之前的文章,我们发现:在拖拽控件的时候,页面每一个控件的名称没有跳转,都是用的默认的,这样不方便后期去按钮,输入框等进行其他相关操作,会导致代码可读性差,接下来可以进行优化。
Python GUI编程:PySide2页面设计优化
Python GUI编程:PySide2通过加载页面设计文件的方式运行
通过以上2篇文章,可以收获在python语言中,实现GUI编程,开发自己的一些测试小工具,但是还有很多地方可以优化,比如:之前讲的窗体运行需要先将ui文件转换为python脚本,再编写代码去启动,每当页面重新设计的时候,需要重新转换代码,并且每次转换会覆盖之前自动生成的脚本。