PyQt6实战5--WebChrome浏览器

PyQt6中不包含QWebEngine

需要单独安装PyQtWebEngine

下面的代码是在CodeGeex插件下辅助写的,这个插件太爽了,基本不用写什么代码

# 功能

简易浏览器

  1. 打开网页
  2. 页面回退,前进
  3. 创建tab页

# 运行效果

代码:

from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import *
from PyQt6.QtWidgets import *
from PyQt6.QtGui import *
import sys

from about_dialog import *


class WebChrome(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.initAction()
        
    def initUI(self):
        self.setWindowTitle('WebChrome')
        self.setGeometry(100, 100, 800, 600)
        
        self.tabs = QTabWidget()
        self.tabs.setDocumentMode(True)
        self.tabs.setTabsClosable(True)
        self.add_new_tab()
        
        self.setCentralWidget(self.tabs)
        self.menuBar().setNativeMenuBar(False)
        self.help_menu = self.menuBar().addMenu('Help')
        
        self.navtb = QToolBar('Navigation')
        self.navtb.setIconSize(QSize(16, 16))
        self.addToolBar(self.navtb)
        
        self.urlbar = QLineEdit()
        
        
    def initAction(self):
        self.tabs.tabBarDoubleClicked.connect(self.tab_open_doubleclick)
        self.tabs.currentChanged.connect(self.current_tab_changed)
        self.tabs.tabCloseRequested.connect(self.close_current_tab)
        self.urlbar.returnPressed.connect(self.navigate_to_url)
        
        about_action = QAction('About', self)
        about_action.setStatusTip('find out more about this application')
        about_action.triggered.connect(self.about)
        self.help_menu.addAction(about_action)
        
        back_btn = QAction(QIcon('imgs/arrow_left.png'), 'Back', self)
        back_btn.setStatusTip('back to preview page')
        back_btn.triggered.connect(lambda: self.tabs.currentWidget().back())
        self.navtb.addAction(back_btn)
        
        next_btn = QAction( QIcon('imgs/arrow_right.png'), "Forward", self)
        next_btn.setStatusTip("Forward to next page")
        next_btn.triggered.connect(lambda: self.tabs.currentWidget().forward())
        self.navtb.addAction(next_btn)

        reload_btn = QAction( QIcon('imgs/reload.png'), "Reload", self)
        reload_btn.setStatusTip("Reload page")
        reload_btn.triggered.connect(lambda: self.tabs.currentWidget().reload())
        self.navtb.addAction(reload_btn)
        
        self.navtb.addWidget(self.urlbar)
        
    def about(self):
        dlg = AboutDialog()
        dlg.exec()
        
    def navigate_to_url(self):
        q = QUrl(self.urlbar.text())
        if q.scheme() == '':
            q.setScheme('http')
        self.tabs.currentWidget().setUrl(q)
        
    def close_current_tab(self, index):
        if self.tabs.count() < 2:
            return
        self.tabs.removeTab(index)
        
    def current_tab_changed(self, index):
        if index < 0:
            return
        qurl = self.tabs.currentWidget().url()
        self.update_title(self.tabs.currentWidget())
        self.update_urlbar(qurl, self.tabs.currentWidget())
        
    def update_title(self, browser):
        if browser != self.tabs.currentWidget():
            return
        title = self.tabs.currentWidget().title()
        self.setWindowTitle(title)
    
    def update_urlbar(self, q, browser):
        if browser != self.tabs.currentWidget():
            return
        if q.scheme() == 'https':
            self.tabs.setTabIcon(self.tabs.currentIndex(), QIcon('icons/lock.png'))
        else:
            self.tabs.setTabIcon(self.tabs.currentIndex(), QIcon('icons/globe.png'))
        self.urlbar.setText(q.toString())
        self.urlbar.setCursorPosition(0)
        
    def tab_open_doubleclick(self, index):
        if index == -1:
            self.add_new_tab()
            
    def add_new_tab(self, qurl=None, label='Blank'):
        if qurl is None:
            qurl = QUrl('http://www.google.com')
        browser = QWebEngineView()
        browser.setUrl(qurl)
        i = self.tabs.addTab(browser, label)
        self.tabs.setCurrentIndex(i)
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = WebChrome()
    window.show()
    sys.exit(app.exec())
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import QWidget

class AboutDialog(QDialog):
    def __init__(self) -> None:
        super().__init__()
        QBtn = QDialogButtonBox.StandardButton.Ok  # No cancel
        self.buttonBox = QDialogButtonBox(QBtn)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        
        layout = QVBoxLayout()
        
        title = QLabel("<h2>About WebEngineView</h2>")
        font = title.font()
        font.setPointSize(20)
        title.setFont(font)
        
        layout.addWidget(title)
        
        logo = QLabel()
        logo.setPixmap(QPixmap("/imgs/json.png"))
        layout.addWidget(logo)
        
        layout.addWidget(QLabel("<b>Version:</b> 1.0"))
        layout.addWidget(QLabel("Copyright 2015 Mozarella Inc."))
        
        for i in range(layout.count()):
            layout.itemAt(i).setAlignment(Qt.AlignmentFlag.AlignHCenter)
            
        layout.addWidget(self.buttonBox)
        self.setLayout(layout)

 代码地址:

GitHub - chunlaiqingke/Tiny-Tool

 公众号

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值