0% found this document useful (0 votes)
12 views13 pages

Python Code 11

Learn python
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views13 pages

Python Code 11

Learn python
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 13

I'll help you create a modern web browser with an awesome GUI using

Python and PyQt5. Here's a complete implementation with multiple features:


import sys
import os
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtGui import *

class BrowserTab(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.browser = QWebEngineView()
self.browser.setUrl(QUrl('https://www.google.com'))

# Create layout
layout = QVBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.browser)
self.setLayout(layout)

# Connect signals
self.browser.urlChanged.connect(self.update_url)
self.browser.loadFinished.connect(self.update_title)

def navigate_to_url(self, url):


if not url.startswith('http'):
url = 'https://' + url
self.browser.setUrl(QUrl(url))

def update_url(self, q):


self.parent().parent().url_bar.setText(q.toString())

def update_title(self):
title = self.browser.page().title()
if len(title) > 20:
title = title[:20] + "..."
index = self.parent().indexOf(self)
self.parent().setTabText(index, title)

class ModernBrowser(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("AwesomeBrowser")
self.setWindowIcon(QIcon(self.create_icon()))
self.setGeometry(100, 100, 1200, 800)

# Apply modern dark theme


self.setStyleSheet(self.get_dark_theme())

# Create tab widget


self.tabs = QTabWidget()
self.tabs.setDocumentMode(True)
self.tabs.setTabsClosable(True)
self.tabs.setMovable(True)
self.tabs.tabCloseRequested.connect(self.close_current_tab)
self.tabs.currentChanged.connect(self.current_tab_changed)

# Create navigation toolbar


self.create_navigation_bar()

# Create status bar


self.status_bar = QStatusBar()
self.setStatusBar(self.status_bar)
self.status_bar.showMessage("Ready")

# Set central widget


self.setCentralWidget(self.tabs)

# Add first tab


self.add_new_tab()

# Create menu bar


self.create_menu_bar()

# Create shortcuts
self.create_shortcuts()

def create_icon(self):
# Create a simple browser icon
pixmap = QPixmap(32, 32)
pixmap.fill(Qt.transparent)
painter = QPainter(pixmap)
painter.setRenderHint(QPainter.Antialiasing)
painter.setBrush(QBrush(QColor(70, 130, 180)))
painter.setPen(QPen(QColor(255, 255, 255), 2))
painter.drawEllipse(4, 4, 24, 24)
painter.drawText(QRect(4, 4, 24, 24), Qt.AlignCenter, "B")
painter.end()
return QIcon(pixmap)

def get_dark_theme(self):
return """
QMainWindow {
background-color: #2b2b2b;
color: #ffffff;
}
QTabWidget::pane {
border: 1px solid #555555;
background-color: #2b2b2b;
}

QTabBar::tab {
background-color: #404040;
color: #ffffff;
padding: 8px 16px;
margin-right: 2px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}

QTabBar::tab:selected {
background-color: #0078d4;
}

QTabBar::tab:hover {
background-color: #555555;
}

QToolBar {
background-color: #404040;
border: none;
spacing: 3px;
padding: 5px;
}

QToolButton {
background-color: #505050;
border: 1px solid #606060;
border-radius: 4px;
padding: 6px;
color: #ffffff;
}

QToolButton:hover {
background-color: #0078d4;
}

QToolButton:pressed {
background-color: #005a9e;
}

QLineEdit {
background-color: #505050;
border: 2px solid #606060;
border-radius: 6px;
padding: 8px;
color: #ffffff;
font-size: 12px;
}

QLineEdit:focus {
border-color: #0078d4;
}

QMenuBar {
background-color: #404040;
color: #ffffff;
border-bottom: 1px solid #555555;
}

QMenuBar::item {
padding: 6px 12px;
}

QMenuBar::item:selected {
background-color: #0078d4;
}

QMenu {
background-color: #404040;
color: #ffffff;
border: 1px solid #555555;
}

QMenu::item {
padding: 6px 20px;
}

QMenu::item:selected {
background-color: #0078d4;
}

QStatusBar {
background-color: #404040;
color: #ffffff;
border-top: 1px solid #555555;
}
"""

def create_navigation_bar(self):
# Create navigation toolbar
nav_toolbar = QToolBar("Navigation")
nav_toolbar.setIconSize(QSize(24, 24))
self.addToolBar(nav_toolbar)

# Back button
back_btn = QAction("⬅", self)
back_btn.setStatusTip("Go back")
back_btn.triggered.connect(lambda:
self.current_browser().back())
nav_toolbar.addAction(back_btn)

# Forward button
forward_btn = QAction("➡", self)
forward_btn.setStatusTip("Go forward")
forward_btn.triggered.connect(lambda:
self.current_browser().forward())
nav_toolbar.addAction(forward_btn)

# Reload button
reload_btn = QAction("🔄", self)
reload_btn.setStatusTip("Reload page")
reload_btn.triggered.connect(lambda:
self.current_browser().reload())
nav_toolbar.addAction(reload_btn)

# Home button
home_btn = QAction("🏠", self)
home_btn.setStatusTip("Go home")
home_btn.triggered.connect(self.navigate_home)
nav_toolbar.addAction(home_btn)

nav_toolbar.addSeparator()

# URL bar
self.url_bar = QLineEdit()
self.url_bar.setPlaceholderText("Enter URL or search...")
self.url_bar.returnPressed.connect(self.navigate_to_url)
nav_toolbar.addWidget(self.url_bar)

# Search button
search_btn = QAction("🔍", self)
search_btn.setStatusTip("Search")
search_btn.triggered.connect(self.navigate_to_url)
nav_toolbar.addAction(search_btn)

nav_toolbar.addSeparator()

# New tab button


new_tab_btn = QAction("➕", self)
new_tab_btn.setStatusTip("New tab")
new_tab_btn.triggered.connect(self.add_new_tab)
nav_toolbar.addAction(new_tab_btn)

# Bookmark button
bookmark_btn = QAction("⭐", self)
bookmark_btn.setStatusTip("Bookmark this page")
bookmark_btn.triggered.connect(self.bookmark_page)
nav_toolbar.addAction(bookmark_btn)

# Downloads button
downloads_btn = QAction("📥", self)
downloads_btn.setStatusTip("Downloads")
downloads_btn.triggered.connect(self.show_downloads)
nav_toolbar.addAction(downloads_btn)

# Settings button
settings_btn = QAction("⚙", self)
settings_btn.setStatusTip("Settings")
settings_btn.triggered.connect(self.show_settings)
nav_toolbar.addAction(settings_btn)

def create_menu_bar(self):
menubar = self.menuBar()

# File menu
file_menu = menubar.addMenu('File')

new_tab_action = QAction('New Tab', self)


new_tab_action.setShortcut('Ctrl+T')
new_tab_action.triggered.connect(self.add_new_tab)
file_menu.addAction(new_tab_action)

new_window_action = QAction('New Window', self)


new_window_action.setShortcut('Ctrl+N')
new_window_action.triggered.connect(self.new_window)
file_menu.addAction(new_window_action)

file_menu.addSeparator()

exit_action = QAction('Exit', self)


exit_action.setShortcut('Ctrl+Q')
exit_action.triggered.connect(self.close)
file_menu.addAction(exit_action)

# View menu
view_menu = menubar.addMenu('View')

fullscreen_action = QAction('Toggle Fullscreen', self)


fullscreen_action.setShortcut('F11')
fullscreen_action.triggered.connect(self.toggle_fullscreen)
view_menu.addAction(fullscreen_action)

zoom_in_action = QAction('Zoom In', self)


zoom_in_action.setShortcut('Ctrl+=')
zoom_in_action.triggered.connect(self.zoom_in)
view_menu.addAction(zoom_in_action)

zoom_out_action = QAction('Zoom Out', self)


zoom_out_action.setShortcut('Ctrl+-')
zoom_out_action.triggered.connect(self.zoom_out)
view_menu.addAction(zoom_out_action)

# Tools menu
tools_menu = menubar.addMenu('Tools')

dev_tools_action = QAction('Developer Tools', self)


dev_tools_action.setShortcut('F12')
dev_tools_action.triggered.connect(self.show_dev_tools)
tools_menu.addAction(dev_tools_action)

# Help menu
help_menu = menubar.addMenu('Help')

about_action = QAction('About', self)


about_action.triggered.connect(self.show_about)
help_menu.addAction(about_action)

def create_shortcuts(self):
# Additional shortcuts
QShortcut(QKeySequence("Ctrl+W"), self,
self.close_current_tab)
QShortcut(QKeySequence("Ctrl+R"), self, lambda:
self.current_browser().reload())
QShortcut(QKeySequence("Ctrl+L"), self, lambda:
self.url_bar.selectAll())

def add_new_tab(self, qurl=None):


if qurl is None:
qurl = QUrl('https://www.google.com')

browser_tab = BrowserTab(self.tabs)

if qurl:
browser_tab.browser.setUrl(qurl)

i = self.tabs.addTab(browser_tab, "New Tab")


self.tabs.setCurrentIndex(i)

# Connect signals
browser_tab.browser.urlChanged.connect(lambda qurl,
browser=browser_tab.browser:
self.update_url(qurl,
browser))
browser_tab.browser.loadFinished.connect(lambda _, i=i,
browser=browser_tab.browser:
self.update_title(i,
browser))

def current_browser(self):
return self.tabs.currentWidget().browser

def close_current_tab(self, i=None):


if i is None:
i = self.tabs.currentIndex()

if self.tabs.count() < 2:
return

self.tabs.removeTab(i)

def navigate_to_url(self):
url = self.url_bar.text()
if not url.startswith('http'):
if '.' in url:
url = 'https://' + url
else:
url = f'https://www.google.com/search?q={url}'

self.current_browser().setUrl(QUrl(url))

def navigate_home(self):
self.current_browser().setUrl(QUrl('https://www.google.com'))

def update_url(self, q, browser=None):


if browser != self.current_browser():
return
self.url_bar.setText(q.toString())

def update_title(self, i, browser):


title = browser.page().title()
if len(title) > 20:
title = title[:20] + "..."
self.tabs.setTabText(i, title)

def current_tab_changed(self, i):


qurl = self.current_browser().url()
self.update_url(qurl, self.current_browser())

def bookmark_page(self):
url = self.current_browser().url().toString()
title = self.current_browser().page().title()
QMessageBox.information(self, "Bookmark Added",
f"Bookmarked: {title}\nURL: {url}")

def show_downloads(self):
QMessageBox.information(self, "Downloads", "Downloads feature
coming soon!")

def show_settings(self):
dialog = QDialog(self)
dialog.setWindowTitle("Settings")
dialog.setFixedSize(400, 300)
dialog.setStyleSheet(self.get_dark_theme())

layout = QVBoxLayout()

# Theme selection
theme_group = QGroupBox("Theme")
theme_layout = QVBoxLayout()

dark_radio = QRadioButton("Dark Theme")


dark_radio.setChecked(True)
light_radio = QRadioButton("Light Theme")

theme_layout.addWidget(dark_radio)
theme_layout.addWidget(light_radio)
theme_group.setLayout(theme_layout)

layout.addWidget(theme_group)

# Home page setting


home_group = QGroupBox("Home Page")
home_layout = QVBoxLayout()

home_input = QLineEdit("https://www.google.com")
home_layout.addWidget(QLabel("Home URL:"))
home_layout.addWidget(home_input)
home_group.setLayout(home_layout)

layout.addWidget(home_group)

# Buttons
button_layout = QHBoxLayout()
ok_btn = QPushButton("OK")
cancel_btn = QPushButton("Cancel")

ok_btn.clicked.connect(dialog.accept)
cancel_btn.clicked.connect(dialog.reject)

button_layout.addWidget(ok_btn)
button_layout.addWidget(cancel_btn)

layout.addLayout(button_layout)
dialog.setLayout(layout)
dialog.exec_()
def new_window(self):
new_browser = ModernBrowser()
new_browser.show()

def toggle_fullscreen(self):
if self.isFullScreen():
self.showNormal()
else:
self.showFullScreen()

def zoom_in(self):
self.current_browser().setZoomFactor(
self.current_browser().zoomFactor() + 0.1)

def zoom_out(self):
self.current_browser().setZoomFactor(
self.current_browser().zoomFactor() - 0.1)

def show_dev_tools(self):
QMessageBox.information(self, "Developer Tools",
"Developer tools feature coming soon!")

def show_about(self):
QMessageBox.about(self, "About AwesomeBrowser",
"""
<h2>AwesomeBrowser</h2>
<p>A modern web browser built with Python and
PyQt5</p>
<p>Version 1.0</p>
<p>Features:</p>
<ul>
<li>Modern dark theme</li>
<li>Multiple tabs</li>
<li>Navigation controls</li>
<li>Bookmarks</li>
<li>Keyboard shortcuts</li>
<li>Zoom controls</li>
</ul>
""")

class SplashScreen(QSplashScreen):
def __init__(self):
# Create splash screen pixmap
pixmap = QPixmap(400, 300)
pixmap.fill(QColor(43, 43, 43))

painter = QPainter(pixmap)
painter.setRenderHint(QPainter.Antialiasing)
# Draw logo
painter.setBrush(QBrush(QColor(0, 120, 212)))
painter.setPen(QPen(QColor(255, 255, 255), 3))
painter.drawEllipse(150, 80, 100, 100)

# Draw text
painter.setPen(QColor(255, 255, 255))
painter.setFont(QFont("Arial", 24, QFont.Bold))
painter.drawText(QRect(0, 200, 400, 50), Qt.AlignCenter,
"AwesomeBrowser")

painter.setFont(QFont("Arial", 12))
painter.drawText(QRect(0, 240, 400, 30), Qt.AlignCenter,
"Loading...")

painter.end()

super().__init__(pixmap)
self.setWindowFlags(Qt.WindowStaysOnTopHint |
Qt.FramelessWindowHint)

def main():
app = QApplication(sys.argv)
app.setApplicationName("AwesomeBrowser")
app.setApplicationVersion("1.0")

# Show splash screen


splash = SplashScreen()
splash.show()

# Process events to show splash screen


app.processEvents()

# Simulate loading time


QTimer.singleShot(2000, splash.close)

# Create and show main window


def show_browser():
browser = ModernBrowser()
browser.show()

QTimer.singleShot(2000, show_browser)

sys.exit(app.exec_())

if __name__ == '__main__':
main()
Features of this Awesome Browser:
🎨 Modern GUI Features:
 Dark Theme: Beautiful dark theme with modern styling
 Splash Screen: Professional loading screen
 Smooth Animations: Hover effects and transitions
 Modern Icons: Unicode icons for all buttons
🌐 Browser Features:
 Multiple Tabs: Add, close, and switch between tabs
 Navigation: Back, forward, reload, home buttons
 Smart URL Bar: Handles URLs and search queries
 Zoom Controls: Zoom in/out functionality
 Fullscreen Mode: F11 to toggle fullscreen
⌨️Keyboard Shortcuts:
 Ctrl+T: New tab
 Ctrl+W: Close tab
 Ctrl+R: Reload page
 Ctrl+L: Focus URL bar
 Ctrl+N: New window
 F11: Toggle fullscreen
 F12: Developer tools (placeholder)

📋 Menu System:
 File Menu: New tab, new window, exit
 View Menu: Fullscreen, zoom controls
 Tools Menu: Developer tools
 Help Menu: About dialog
⚙️Additional Features:
 Settings Dialog: Theme and homepage configuration
 Bookmark System: Basic bookmarking functionality
 Status Bar: Shows loading status
 Responsive Design: Adapts to window resizing

Installation Requirements:
pip install PyQt5 PyQtWebEngine

Usage:
1. Save the code as awesome_browser.py
2. Install the required packages
3. Run: python awesome_browser.py
The browser will start with a splash screen and then open with Google as the
homepage. You can navigate to any website, open multiple tabs, and use all
the modern browser features!
This browser provides a solid foundation that you can extend with additional
features like bookmarks management, history, downloads, extensions, and
more advanced settings.

You might also like