# Qweb Indev-20220816 import os import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWebEngineWidgets import QWebEngineView class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle ('Qweb(indev)') self.resize(1300, 700) 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("https://www.google.org")) self.create_tab(self.webview) navigation_bar = QToolBar('Navigation') navigation_bar.setIconSize(QSize(16, 16)) self.addToolBar(navigation_bar) back_button = QAction(QIcon('images/arrowbackbutton.png'), 'Back', self) next_button = QAction(QIcon('images/arrowforwardbutton.png'), 'Forward', self) stop_button = QAction(QIcon('images/stopbutton.png'), 'stop', self) reload_button = QAction(QIcon('images/arrowreloadbutton.png'), 'reload', self) back_button.triggered.connect(self.webview.back) next_button.triggered.connect(self.webview.forward) stop_button.triggered.connect(self.webview.stop) reload_button.triggered.connect(self.webview.reload) navigation_bar.addAction(back_button) navigation_bar.addAction(next_button) navigation_bar.addAction(stop_button) navigation_bar.addAction(reload_button) self.urlbar = QLineEdit() self.urlbar.returnPressed.connect(self.navigate_to_url) navigation_bar.addSeparator() navigation_bar.addWidget(self.urlbar) self.webview.urlChanged.connect(self.renew_urlbar) def navigate_to_url(self): q = QUrl(self.urlbar.text()) if q.scheme() == '': q.setScheme('http') self.webview.setUrl(q) def renew_urlbar(self, q): self.urlbar.setText(q.toString()) self.urlbar.setCursorPosition(0) 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) def close_Tab(self, index): if self.tabWidget.count() > 1: self.tabWidget.removeTab(index) else: self.close () class WebEngineView(QWebEngineView): def __init__(self, mainwindow, parent=None): super(WebEngineView, self).__init__(parent) self.mainwindow = mainwindow 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) QApplication.setApplicationName('Qweb(indev) - simple browser') QApplication.setApplicationVersion('0.0.1') browser = MainWindow() browser.show() sys.exit(app.exec_()) # First other source code (in development) ''' import sys import os from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtWebEngineWidgets import * class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle("Qweb(indev)") self.resize(1300, 700) self.show() self.tabs = QTabWidget() self.tabs.setTabShape(QTabWidget.Triangular) self.tabs.setDocumentMode(True) self.tabs.setDocumentMode(True) self.tabs.setMovable(True) self.tabs.setTabsClosable(True) self.tabs.tabBarDoubleClicked.connect(self.tab_open_doubleclick) self.tabs.currentChanged.connect(self.current_tab_changed) self.setCentralWidget(self.tabs) self.webview = WebEngineView (self) self.webview.load(QUrl("https://www.google.com")) self.status = QStatusBar() self.setStatusBar(self.status) navtb = QToolBar("Navigation") navtb.setIconSize(QSize(15,15)) self.addToolBar(navtb) back_btn = QAction(QIcon(os.path.join('images', 'arrowbackbutton.png')), "Back", self) back_btn.setStatusTip("Back to previous page") back_btn.triggered.connect(lambda: self.tabs.currentWidget().back()) navtb.addAction(back_btn) forward_btn = QAction(QIcon(os.path.join('images', 'arrowforwardbutton.png')), "Forward", self) forward_btn.setStatusTip("Forward to next page") forward_btn.triggered.connect(lambda: self.tabs.currentWidget().forward()) navtb.addAction(forward_btn) reload_btn = QAction(QIcon(os.path.join('images', 'arrowreloadbutton.png')), "Reload", self) reload_btn.setStatusTip("Reload page") reload_btn.triggered.connect(lambda: self.tabs.currentWidget().reload()) navtb.addAction(reload_btn) home_btn = QAction(QIcon(os.path.join('images', 'homebutton.png')), "Home", self) home_btn.setStatusTip("Home page") home_btn.triggered.connect(lambda: self.navigate_home) navtb.addAction(home_btn) navtb.addSeparator() self.httpsicon = QLabel() self.httpsicon.setPixmap(QPixmap(os.path.join('images', 'lock-nossl.png'))) navtb.addWidget(self.httpsicon) self.urlbar = QLineEdit() self.urlbar.returnPressed.connect(lambda: self.navigate_to_url) navtb.addWidget(self.urlbar) stop_btn = QAction(QIcon(os.path.join('images', 'stopbutton.png')), "Stop", self) stop_btn.setStatusTip("Stop loading current page") stop_btn.triggered.connect(lambda: self.tabs.currentWidget().stop()) navtb.addAction(stop_btn) file_menu = self.menuBar().addMenu('&File') new_tab_action = QAction(QIcon(os.path.join('images', 'newtab.png')), "New Tab", self) new_tab_action.setStatusTip("New Tab") new_tab_action.triggered.connect(lambda _: self.add_new_tab()) file_menu.addAction(new_tab_action) open_file_action = QAction(QIcon(os.path.join('images', 'openbutton.png')), "Open file", self) open_file_action.setStatusTip("Open file") open_file_action.triggered.connect(self.open_file) file_menu.addAction(open_file_action) save_file_action = QAction(QIcon(os.path.join('images', 'savebutton.png')), "Save page to file", self) save_file_action.setStatusTip("Save file") save_file_action.triggered.connect(self.save_file) file_menu.addAction(save_file_action) help_menu = self.menuBar().addMenu('&Help') about_action = QAction(QIcon(os.path.join('images', 'aboutbutton.png')), "About the browser", self) about_action.setStatusTip("Find out more about Qweb") about_action.triggered.connect(self.about) help_menu.addAction(about_action) self.add_new_tab(QUrl('https://www.google.com/'), 'Homepage') self.show() self.setWindowIcon(QIcon(os.path.join('images', 'icon.png'))) def add_new_tab(self, qurl=None, label="Blank"): if qurl is None: qurl = QUrl('') browser = QWebEngineView() browser.setUrl(qurl) i = self.tabs.addTab(browser, label) self.tabs.setCurrentIndex(i) browser.urlChanged.connect(lambda qurl, browser=browser: self.update_urlbar(qurl, browser)) browser.loadFinished.connect(lambda _, i=i, browser=browser: self.tabs.setTabText(i, browser.page().title())) def tab_open_doubleclick(self, i): if i == -1: self.add_new_tab() def current_tab_changed(self, i): qurl = self.tabs.currentWidget().url() self.update_urlbar(qurl, self.tabs.currentWidget()) self.update_title(self.tabs.currentWidget()) def close_tab(self, index): if self.tabs.count() > 1: self.tabs.removeTab(index) else: self.close() def update_title(self, browser): if browser != self.tabs.currentWidget(): return title = self.tabs.currentWidget().page().title() self.setWindowTitle("%s - Qweb" % title) def about(self): pass def open_file(self): filename, _= QFileDialog.getOpenFileName(self, "Open file", "", "*.htm *.html", "All files (*.*)") if filename: with open(filename, 'r') as f: html = f.read() self.tabs.currentWidget().setHtml(html) self.urlbar.setText(filename) def save_file(self): filename, _=QFileDialog.getSaveFileName(self, "Save page", "", "*.htm *.html", "All files (*.*)") if filename: html = self.tabs.currentWidget().page().toHtml() with open(filename, 'w') as f: f.write(html) def navigate_home(self): self.tabs.currentWidget().setUrl(QUrl('https://www.google.com/')) def navigate_to_url(self): q = QUrl(self.urlBar.text()) if q.scheme() == "": q.setScheme("http") self.tabs.currentWidget().setUrl(q) def update_urlbar(self, q, browser=None): if browser != self.tabs.currentWidget(): return if q.scheme() == 'https': self.httpsicon.setPixmap(QPixmap(os.path.join('image', 'lock-nossl.png'))) else: self.httpsicon.setPixmap(QPixmap(os.path.join('image', 'nossl.png'))) self.urlbar.setText(q.toString()) self.urlbar.setCursorPosition(0) # Will need to be improved class WebEngineView(QWebEngineView): def __init__(self, mainwindow, parent=None): super(WebEngineView, self).__init__(parent) self.mainwindow = mainwindow 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) QApplication.setApplicationName('Qweb(indev) - simple browser') QApplication.setApplicationVersion('0.0.1') browser = MainWindow() browser.show() sys.exit(app.exec_()) '''