当前位置: 首页 > backend >正文

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变量来更改主页
http://www.xdnf.cn/news/7767.html

相关文章:

  • leetcode字符串篇【公共前缀】:14-最长公共前缀
  • C语言-9.指针
  • “交互式“ PDF 与“静态“ PDF 表单的区别
  • liinux系统安装Helm
  • 系统数据对接-从获取到处理的全流程
  • PH热榜 | 2025-05-20
  • Ubuntu24.04安装Dify
  • YOLO中model.predict方法返回内容Results详解
  • 智能笔记助手-NotepadAI使用指南
  • 【大模型面试每日一题】Day 24:假设训练资源有限,如何在模型参数量、训练数据量和训练时长三者间做权衡?
  • MySQL之数据库基础知识,库和表的操作以及基础数据类型
  • Paillier加密方案的原理、实现与应用(dev)
  • Cribl 使用Function 的实际例子-02
  • MinerU可视化界面程序部署(Windows环境)
  • HarmonyOS5云服务技术分享--退出登录文档问题
  • Jenkins安装和配置
  • 无人机精准降落与避障模块技术解析
  • ZYNQ Cache一致性问题解析与实战:从原理到创新优化
  • SAGE:基于SAM进行二级蒸馏的多模态图像融合新方法,CVPR2025
  • 测试概念
  • 嵌入式项目之交叉编译m2440篇
  • 基于望获操作系统的具身智能人形机器人典型应用案例
  • CompleteableFuture的异步任务编排
  • python读写bin文件
  • 《算法笔记》11.7小节——动态规划专题->背包问题 问题 C: 货币系统
  • SCAU18923--二叉树的直径
  • NC65联查单据问题总结
  • 宽带卫星通信介绍
  • 今日行情明日机会——20250520
  • 基于双通道频谱分析的振动信号故障诊断1