受够了百度网盘官方客户端?我用PySide6写了一个50MB的桌面文件管理器,支持多标签+分屏+拖拽
# 百度网盘官方客户端 200MB 还不好用,我写了一个 50MB 的替代品
我百度网盘里有大概 2TB 的文件,目录套目录,时间长了整理起来很头疼。官方客户端这两年越来越重,装完一看 200 多 MB,开个窗口内存就上 300MB,关键是功能上连 Windows 资源管理器十年前的水平都达不到。
最让我受不了的几点:
- 不能多开标签页,想同时看两个文件夹得开两个窗口
- 没有分屏,整理文件时来回切目录
- 拖拽移动文件不行,右键复制也不行,只能靠官方那几个按钮
- 没目录树,进深层文件夹要一层层点
- 搜索只能搜名字,不能按文件类型过滤
后来实在忍不下去了,拿 PySide6 自己写了一个。
网盘链接:https://pan.baidu.com/s/1cFB90jOPGHVKrogxfXr31w?pwd=e7p5 提取码: e7p5
项目地址:https://github.com/onexf426/baidu_pan_Manager
有需求可以直接文章下评论,看到会添加。
## 跟官方客户端比到底差多少
| 功能 | 官方客户端 | 这个 |
|------|-----------|------|
| 安装包大小 | 200MB+ | ~50MB |
| 运行时内存 | 300MB+ | ~60MB |
| 多标签 | 没有 | 有 |
| 左右分屏 | 没有 | 有 |
| 拖拽移动/复制 | 没有 | 有 |
| 目录树 | 没有 | 有 |
| 按类型筛选 | 没有 | 有 |
| 右键菜单 | 就几个选项 | 完整菜单 |
| 断网能不能用 | 依赖 Electron 网络 | 原生 Qt,离线可用 |
体积差 4 倍,内存差 5 倍,功能还更多。Electron 做桌面应用就是这样,写起来快但跑起来重。
## 具体有哪些功能

### 多标签
跟浏览器一样,上面一排标签页,每个标签独立导航。点 + 号新建,关掉就 Ctrl+W。不同目录同时打开不用切来切去。
### 分屏
工具栏上点一下切换成双栏模式,左右两个独立的文件面板,各自有目录树和文件列表。左边选中文件拖到右边的目录树或文件区域,弹窗问你是移动还是复制,选完就执行。
这个功能在整理文件的时候最实用,比如左边打开"待整理"文件夹,右边打开分类好的目录,拖过去就完事。

### 拖拽操作
拖拽的支持范围:
- 文件拖到左侧目录树的某个节点 → 移动/复制到那个目录
- 文件拖到另一侧文件列表 → 移动/复制到另一侧的当前目录
- 支持多选拖拽(Ctrl+Click 多选后再拖)
弹窗确认选移动还是复制,不会误操作。百度网盘 API 对移动和复制是分开的接口,所以这里要区分。
### 目录树
左侧目录树是懒加载的,展开哪个节点才去请求哪个目录的子目录,不会一次性把整个网盘目录结构拉下来。网盘根目录下如果有几十个文件夹,全加载要发几十次请求,懒加载只在需要时才发。
### 搜索和筛选
搜索框输入关键词直接调百度网盘的搜索 API。加了分类筛选下拉框:文档、图片、视频、音乐、压缩包,选了之后会在搜索请求里带上文件类型参数。
输入做了 300ms 的防抖,不然每敲一个字母就发一次请求,一是浪费 API 配额,二是返回顺序会乱。
### 批量操作
Ctrl+Click 多选,Shift+Click 范围选择,跟资源管理器一样。工具栏上有批量移动、复制、删除按钮。操作过程中弹进度窗口,显示进度条、成功/失败计数,失败的文件会列出具体原因。
### 文件详情
底部有一个详情面板,选中文件后显示文件名、路径、大小、MD5、修改时间。MD5 这个字段百度网盘 API 是返回的,用来校验文件比较方便。
### UI
整体按 macOS 那种风格做的,SF Pro 的配色,圆角控件,细滚动条,Toast 通知有淡入淡出动画。没有花里胡哨的东西,就是干净够用。
## 代码怎么组织的
```
技术栈:Python 3.10+ / PySide6 / requests
打包工具:PyInstaller
core/
├── api.py 百度网盘 Open API 封装
├── auth.py OAuth2 授权流程
├── config.py 配置读写(JSON 存本地)
└── token_manager.py Token 管理和自动刷新
ui/
├── main_window.py 主窗口,标签系统、分屏、工具栏、搜索、拖拽
├── file_pane.py 文件面板,包含导航栏+目录树+文件表格,分屏时左右各一个实例
├── file_table.py 文件表格,排序、拖拽源、右键菜单、行内重命名、滚动分页
├── dir_tree.py 目录树,懒加载、拖拽目标
├── styles.py 全局样式表
└── toast.py Toast 通知
utils/
├── file_utils.py 文件类型判断、大小格式化
└── debounce.py 搜索防抖
```
几个设计上比较关键的决策:
**为什么不用 Electron 用 PySide6。** 体积 50MB vs 200MB,内存 60MB vs 300MB,原生渲染不卡。而且 Electron 打包后 node_modules 里一堆东西,PySide6 打包完就是一整个 exe。在很多内网机器上,Python 环境是现成的,Electron 反而要额外装一堆依赖。
**Token 怎么管。** Token 过期前 5 分钟自动刷新,防止请求发出去才知道过期了。遇到 -10/-11 错误码(Token 无效)也会自动重刷 Token 再重试。API 限流(31034)做了指数退避,不会一直撞墙。
**文件列表怎么加载。** 每次请求 100 条,滚动到底部自动加载下一页。不一次性全拉是因为有些文件夹可能有几千个文件,一次加载太多 API 返回慢,UI 也会卡。
## 怎么用
### 直接跑 exe
Releases 里下载 exe,不需要装 Python,不需要配环境,双击运行。
### 从源码跑
```bash
git clone https://github.com/onexf426/baidu_pan_Manager.git
cd baidu_pan_Manager
pip install -r requirements.txt
python main.py
```
### 第一次用的授权步骤
1. 去百度网盘开放平台 https://pan.baidu.com/union/ 创建应用,拿到 AppKey 和 SecretKey
2. 打开软件,输入 AppKey 和 SecretKey
3. 点"打开授权页面",浏览器跳转到百度授权页
4. 授权完成后复制授权码,粘贴回软件
5. 点"完成授权"
后面 Token 会自动保存和刷新,不需要重复授权。
## 打包
```bash
pyinstaller build.spec
```
生成的 exe 在 dist 目录下,大概 50MB 左右,带图标,没有控制台窗口。
体积能压到 50MB 是因为 build.spec 里排除了大量不用的 Qt 模块(QtWebEngine、QtMultimedia 这些),PySide6 默认全量打包是 200MB+。
## 配置文件
```
Windows: %APPDATA%/baidu-pan-manager/config.json
macOS: ~/Library/Application Support/baidu-pan-manager/config.json
Linux: ~/.config/baidu-pan-manager/config.json
```
存的就几样东西:Token、窗口位置大小、上次打开的目录、搜索历史。
## 后面还想做的
- 上传/下载(目前只做了文件管理,没做传输)
- 批量重命名
- 图片和文档预览
- 对接阿里云盘、夸克网盘
项目地址:https://github.com/onexf426/baidu_pan_Manager
有问题直接提 Issue,觉得有用的话 Star 一下,Star 是开源项目唯一不用花钱的支持方式。
#百度网盘 #PySide6 #Python #桌面应用 #文件管理器 #Qt #开源
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)