6人参与 • 2025-07-25 • Python
在日常工作和生活中,我们需要管理大量的账号密码,从各种网站登录到企业内部系统。虽然市面上有很多密码管理工具,但有时我们需要一个轻量级、可定制的解决方案。今天我将带你使用python的wxpython库,从零开始构建一个功能完整的桌面密码管理器。
在开始编码之前,让我们明确一下密码管理器的核心需求:
我采用了分层架构的设计模式:
├── database layer (数据层)
│ └── sqlite数据库操作封装
├── ui layer (界面层)
│ ├── mainframe (主界面)
│ └── settingsdialog (设置对话框)
└── application layer (应用层)
└── 应用程序入口和生命周期管理
class database: def __init__(self): self.conn = sqlite3.connect('password_manager.db') self.create_table()
数据库类负责所有的数据操作,使用sqlite作为轻量级的本地数据库解决方案。表结构设计简洁明了:
id
: 主键,自增长project_name
: 项目名称url
: 网站地址username
: 用户名password
: 密码主界面采用经典的列表+按钮布局:
class mainframe(wx.frame): def init_ui(self): # 使用listctrl显示项目信息 self.project_list = wx.listctrl(panel, style=wx.lc_report | wx.lc_single_sel) # 功能按钮组 self.open_url_btn = wx.button(panel, label="打开网页") self.copy_username_btn = wx.button(panel, label="复制用户名") self.copy_password_btn = wx.button(panel, label="复制密码") self.settings_btn = wx.button(panel, label="设置")
设计亮点:
wx.lc_report
样式创建详细列表视图wx.lc_single_sel
限制单选,提供更好的用户体验设置界面是整个应用的核心,实现了完整的数据管理功能:
class settingsdialog(wx.dialog): def init_ui(self): # 数据展示区域 self.list_ctrl = wx.listctrl(panel, style=wx.lc_report | wx.lc_single_sel) # 数据输入区域 input_sizer = wx.flexgridsizer(4, 2, 5, 5) # ... 输入控件定义 # 操作按钮区域 self.add_btn = wx.button(panel, label="添加") self.update_btn = wx.button(panel, label="修改") self.delete_btn = wx.button(panel, label="删除")
关键特性:
wx.flexgridsizer
实现响应式表单布局wx.te_password
样式隐藏显示实现跨平台的chrome浏览器启动是一个有趣的技术挑战:
def on_open_url(self, event): record = self.get_selected_record() if record: url = record[2] try: if platform.system() == "windows": subprocess.run(['start', 'chrome', url], shell=true) elif platform.system() == "darwin": # macos subprocess.run(['open', '-a', 'google chrome', url]) else: # linux subprocess.run(['google-chrome', url]) except exception as e: wx.messagebox(f"无法打开chrome浏览器: {str(e)}", "错误", wx.ok | wx.icon_error)
这里使用platform.system()
检测操作系统,并调用相应的系统命令启动chrome浏览器。
在wxpython中,事件绑定是核心概念。我使用了多种事件绑定方式:
# 按钮点击事件 self.add_btn.bind(wx.evt_button, self.on_add) # 列表项选择事件 self.list_ctrl.bind(wx.evt_list_item_selected, self.on_item_selected) # 列表项双击事件 self.project_list.bind(wx.evt_list_item_activated, self.on_open_url)
关键点: 确保数据修改后及时刷新界面显示,保持数据一致性。
输入验证:
def validate_input(self): if not all([self.project_text.getvalue(), self.url_text.getvalue(), self.username_text.getvalue(), self.password_text.getvalue()]): wx.messagebox("请填写所有字段!", "警告", wx.ok | wx.icon_warning) return false return true
确认对话框:
if wx.messagebox("确定要删除选中的记录吗?", "确认", wx.yes_no | wx.icon_question) == wx.yes: # 执行删除操作
使用pyperclip
库实现跨平台的剪贴板操作:
def on_copy_username(self, event): record = self.get_selected_record() if record: pyperclip.copy(record[3]) wx.messagebox("用户名已复制到剪贴板!", "信息", wx.ok | wx.icon_information)
# 安装依赖 pip install wxpython pyperclip # 运行程序 python password_manager.py
使用pyinstaller可以将程序打包成独立的可执行文件:
pip install pyinstaller pyinstaller --onefile --windowed password_manager.py
虽然这是一个演示项目,但在实际使用中需要考虑安全性:
当前安全措施
基于当前的架构,可以轻松扩展以下功能:
通过这个项目,我们学到了:
到此这篇关于利用python开发一个简单的密码管理器的文章就介绍到这了,更多相关python密码管理器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论