利用Python PyQt5模块实现一个浏览器

2022-07-22 14:38:23

利用Python PyQt5模块实现一个浏览器

1. 首先是环境的安装 (本人使用的是PyCharm,python3.6)

pip3 install PyQt5 (没有指定版本的话,默认会安装最新的)
pip3 install sip
pip3 install PyQtWebEngine
(PyQtWebEngine是Qt WebEngine的一组框架,该框架提供了在应用程序中嵌入 Web 内容的能力,并且基于 Chrome 浏览器。)

2. 实现代码

from PyQt5.QtCoreimport*from PyQt5.QtWidgetsimport*from PyQt5.QtGuiimport*from PyQt5.QtWebEngineWidgetsimport*import osimport sysclassMainWindow(QMainWindow):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)

        self.resize(2000,1314)
        self.show()

        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)

        self.webview= WebEngineView(self)
        self.webview.load(QUrl("http://www.baidu.com"))

        self.create_tab(self.webview)

        navtb= QToolBar("Navigation")
        navtb.setIconSize(QSize(16,16))
        self.addToolBar(navtb)

        back_btn= QAction(QIcon(os.path.join('images','houtui.png')),"后退", self)
        back_btn.triggered.connect(self.webview.back)
        navtb.addAction(back_btn)

        next_btn= QAction(QIcon(os.path.join('images','qianjin.png')),"前进", self)
        next_btn.triggered.connect(self.webview.forward)
        navtb.addAction(next_btn)

        reload_btn= QAction(QIcon(os.path.join('images','refresh_icon.png')),"刷新", self)
        reload_btn.triggered.connect(self.webview.reload)
        navtb.addAction(reload_btn)

        home_btn= QAction(QIcon(os.path.join('images','geren1.png')),"主页", self)
        navtb.addAction(home_btn)

        self.urlbar= QLineEdit()

        stop_btn= QAction(QIcon(os.path.join('images','cross-circle.png')),"Stop", self)
        stop_btn.triggered.connect(lambda: self.tabs.currentWidget().stop())
        navtb.addAction(stop_btn)

        self.urlbar.returnPressed.connect(self.navigate_to_url)

        navtb.addSeparator()
        navtb.addWidget(self.urlbar)

        self.webview.urlChanged.connect(self.renew_urlbar)defnavigate_to_url(self):
        q= QUrl(self.urlbar.text())if q.scheme()=='':
            q.setScheme('http')
        self.webview.setUrl(q)defrenew_urlbar(self, q):
        self.urlbar.setText(q.toString())
        self.urlbar.setCursorPosition(0)defcreate_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)defclose_Tab(self, index):if self.tabWidget.count()>1:
            self.tabWidget.removeTab(index)else:
            self.close()classWebEngineView(QWebEngineView):def__init__(self, mainwindow, parent=None):super(WebEngineView, self).__init__(parent)
        self.mainwindow= mainwindowdefcreateWindow(self, QWebEnginePage_WebWindowType):
        new_webview= WebEngineView(self.mainwindow)
        self.mainwindow.create_tab(new_webview)return new_webview


app= QApplication(sys.argv)

browser= MainWindow()
browser.show()

sys.exit(app.exec_())

3. 运行结果

在这里插入图片描述

4. Tips

  1. 如果提示说缺少哪些模块的话,一般Pycharm都会有提示安装,如果没有提示,可以参考一下我运行成功的库:
    在这里插入图片描述
  2. 矢量图的话,可以去网上下载自己喜欢的风格,有很多可以免费下载的
  3. 代码部分参考了爬遍天下无敌手哥哥的文章https://blog.csdn.net/weixin_43881394/article/details/105838498?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162579605316780265495917%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162579605316780265495917&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-105838498.pc_search_result_control_group&utm_term=pyqt5浏览器&spm=1018.2226.3001.4187
  • 作者:sherlockjjobs
  • 原文链接:https://blog.csdn.net/weixin_43456810/article/details/118600157
    更新时间:2022-07-22 14:38:23