Code
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtPrintSupport import *
import os
import sys
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.tabs = QTabWidget()
self.tabs.setDocumentMode(True)
self.tabs.tabBarDoubleClicked.connect(self.tab_open_doubleclick)
self.tabs.currentChanged.connect(self.current_tab_changed)
self.tabs.setTabsClosable(True)
self.tabs.tabCloseRequested.connect(self.close_current_tab)
self.setCentralWidget(self.tabs)
self.status = QStatusBar()
self.setStatusBar(self.status)
self.showMaximized()
self.setWindowIcon(QIcon('https://media.discordapp.net/attachments/773966287915188294/824996426417176586/bird.png'))
navtb = QToolBar("Navigation")
self.addToolBar(navtb)
back_btn = QAction("<", self)
back_btn.setStatusTip("Back to previous page")
back_btn.triggered.connect(lambda: self.tabs.currentWidget().back())
navtb.addAction(back_btn)
next_btn = QAction(">", self)
next_btn.setStatusTip("Forward to next page")
next_btn.triggered.connect(lambda: self.tabs.currentWidget().forward())
navtb.addAction(next_btn)
reload_btn = QAction("⟲", self)
reload_btn.setStatusTip("Reload page")
reload_btn.triggered.connect(lambda: self.tabs.currentWidget().reload())
navtb.addAction(reload_btn)
home_btn = QAction("☖", self)
home_btn.setStatusTip("Go home")
home_btn.triggered.connect(self.navigate_home)
navtb.addAction(home_btn)
navtb.addSeparator()
self.urlbar = QLineEdit()
self.urlbar.returnPressed.connect(self.navigate_to_url)
navtb.addWidget(self.urlbar)
self.add_new_tab(QUrl('https://google.com/'), 'Homepage')
self.show()
self.setWindowTitle("Bird Engine")
yt_btn = QAction('Y', self)
yt_btn.setStatusTip("Go to YouTube")
yt_btn.triggered.connect(self.yt_url)
navtb.addAction(yt_btn)
tw_btn = QAction('T', self)
tw_btn.setStatusTip("Go to Twitter")
tw_btn.triggered.connect(self.tw_url)
navtb.addAction(tw_btn)
ig_btn = QAction('I', self)
ig_btn.setStatusTip("Go to Instagram")
ig_btn.triggered.connect(self.ig_url)
navtb.addAction(ig_btn)
rd_btn = QAction('R', self)
rd_btn.setStatusTip("Go to Reddit")
rd_btn.triggered.connect(self.rd_url)
navtb.addAction(rd_btn)
gm_btn = QAction('G', self)
gm_btn.setStatusTip("Go to Gmail")
gm_btn.triggered.connect(self.gm_url)
navtb.addAction(gm_btn)
info_btn = QAction('?', self)
info_btn.triggered.connect(self.info_url)
navtb.addAction(info_btn)
def info_url(self):
self.tabs.currentWidget().setUrl(QUrl("https://google.com/"))
def yt_url(self):
self.tabs.currentWidget().setUrl(QUrl("https://youtube.com/"))
def tw_url(self):
self.tabs.currentWidget().setUrl(QUrl("https://twitter.com/"))
def ig_url(self):
self.tabs.currentWidget().setUrl(QUrl("https://instagram.com/"))
def rd_url(self):
self.tabs.currentWidget().setUrl(QUrl("https://reddit.com/"))
def gm_url(self):
self.tabs.currentWidget().setUrl(QUrl("https://gmail.com/"))
def add_new_tab(self, qurl = None, label ="Blank"):
if qurl is None:
qurl = QUrl('https://google.com/')
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_current_tab(self, i):
if self.tabs.count() < 2:
return
self.tabs.removeTab(i)
def update_title(self, browser):
if browser != self.tabs.currentWidget():
return
title = self.tabs.currentWidget().page().title()
self.setWindowTitle("% s - Bird Engine " % title)
def navigate_home(self):
self.tabs.currentWidget().setUrl(QUrl("https://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
self.urlbar.setText(q.toString())
self.urlbar.setCursorPosition(0)
app = QApplication(sys.argv)
QApplication.setApplicationName('Bird Engine')
window = MainWindow()
app.exec_()