Python实例题:PyOt实现简易浏览器
目录
Python实例题
题目
代码实现
功能说明
基本浏览功能:
标签页支持:
用户界面:
使用方法
注意事项
Python实例题
题目
PyOt实现简易浏览器
代码实现
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTabWidget, QLineEdit, QPushButton, QToolBar, QVBoxLayout, QWidget)
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrlclass BrowserTab(QWebEngineView):def __init__(self, parent=None):super().__init__(parent)self.loadFinished.connect(self.update_title)def createWindow(self, window_type):# 处理新窗口请求(如点击链接时)if window_type == QWebEngineView.WebBrowserTab:return parent().add_new_tab()return super().createWindow(window_type)def update_title(self):title = self.page().title()if title:self.parent().setWindowTitle(title)class SimpleBrowser(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("简易浏览器")self.setGeometry(100, 100, 1000, 800)# 创建标签页容器self.tabs = QTabWidget()self.tabs.setTabsClosable(True)self.tabs.tabCloseRequested.connect(self.close_tab)self.setCentralWidget(self.tabs)# 创建工具栏toolbar = QToolBar("导航")self.addToolBar(toolbar)# 添加导航按钮back_btn = QPushButton("后退")forward_btn = QPushButton("前进")reload_btn = QPushButton("刷新")home_btn = QPushButton("主页")new_tab_btn = QPushButton("新标签")back_btn.clicked.connect(self.current_tab().back)forward_btn.clicked.connect(self.current_tab().forward)reload_btn.clicked.connect(self.current_tab().reload)home_btn.clicked.connect(self.go_home)new_tab_btn.clicked.connect(self.add_new_tab)# 添加地址栏self.url_bar = QLineEdit()self.url_bar.returnPressed.connect(self.navigate_to_url)# 将控件添加到工具栏toolbar.addWidget(back_btn)toolbar.addWidget(forward_btn)toolbar.addWidget(reload_btn)toolbar.addWidget(home_btn)toolbar.addWidget(new_tab_btn)toolbar.addWidget(self.url_bar)# 设置主页self.home_url = "https://www.baidu.com"# 添加初始标签页self.add_new_tab(QUrl(self.home_url), "主页")def add_new_tab(self, url=None, title="新标签页"):# 创建新标签页if url is None:url = QUrl(self.home_url)browser_tab = BrowserTab(self.tabs)browser_tab.setUrl(url)index = self.tabs.addTab(browser_tab, title)self.tabs.setCurrentIndex(index)# 更新地址栏browser_tab.urlChanged.connect(lambda qurl, tab=browser_tab: self.update_url_bar(qurl, tab))browser_tab.loadFinished.connect(lambda _, i=index, tab=browser_tab: self.tabs.setTabText(i, tab.page().title()))return browser_tabdef current_tab(self):return self.tabs.currentWidget()def close_tab(self, index):if self.tabs.count() > 1:self.tabs.removeTab(index)else:# 如果是最后一个标签页,不关闭而是加载主页self.current_tab().setUrl(QUrl(self.home_url))def navigate_to_url(self):q = QUrl(self.url_bar.text())if q.scheme() == "":q.setScheme("http")self.current_tab().setUrl(q)def update_url_bar(self, q, browser=None):if browser == self.current_tab():self.url_bar.setText(q.toString())self.url_bar.setCursorPosition(0)def go_home(self):self.current_tab().setUrl(QUrl(self.home_url))if __name__ == "__main__":# 确保中文显示正常QApplication.setApplicationName("简易浏览器")app = QApplication(sys.argv)# 创建并显示浏览器窗口window = SimpleBrowser()window.show()# 进入应用程序主循环sys.exit(app.exec_())
功能说明
这个简易浏览器包含以下功能:
-
基本浏览功能:
- 前进、后退、刷新、主页按钮
- 地址栏输入 URL 并导航
- 标签页标题自动更新
-
标签页支持:
- 可以打开多个标签页
- 标签页可以关闭
- 支持新窗口请求(如点击链接时)
-
用户界面:
- 简洁的工具栏布局
- 标签页式浏览体验
使用方法
- 确保安装了 PyQt5 和 PyQtWebEngine:
pip install PyQt5 PyQtWebEngine
- 运行程序:
python simple_browser.py
- 在地址栏输入网址,按回车键访问
- 使用工具栏按钮进行导航
- 点击 "新标签" 按钮打开新标签页
- 点击标签页上的关闭按钮关闭当前标签页
注意事项
- 这是一个简化的浏览器实现,不支持复杂的浏览器功能(如扩展、下载管理等)
- 如需更复杂的功能,可以进一步扩展代码
- 某些网站可能由于安全限制无法正常加载
- 程序使用百度作为主页,可以在代码中修改
home_url
变量来更改主页