不想排座位 (fuckseats)
新人到来,没啥好发的,给佬们带了个小玩具,这家伙长这样(P3 是老版本):



[INFO] 简单来说,这就是一款能让你面对一堆 seats 不再 fuck 的小程序——不想排座位(fuckseats)。
这玩意儿有啥亮点?
首先,我们拒绝纯手工搓座位表!系统支持非常优雅的交互和算法:
- 拖拽式无脑操作:教室网格自由编辑,排座位只需点点点、拖拖拖!支持单人移动、批量框选、多选平移,还有撤销/重做!
- 变态级约束系统(重点):你可以直接设置“指定座位”、“禁用座位”,甚至设置“禁止相邻”!再也不怕班主任问你“为啥这俩人又坐一起了”。
- 自动排座算法:
- 没思路?一键
随机。
- 按成绩?支持
成绩降序、成绩升序、成绩优生前排、成绩优生后排、成绩蛇形分布。
- 搞学习小组?支持
小组内部均衡、师傅带徒弟 模式,还能选组长、合并组、轮换组。
- 极致丝滑的导入导出:
- Excel成绩导入:自动识别带“姓名”的列,不仅能全量导入,还能增量更新成绩!
- 现有座位表导入:强兼老工作流,支持各种奇葩格式,欢迎来试试。
- 一键PPTX/SVG/Excel/作业登记表:省的家长会啥的还得修改,一键使用。
- 小组系统:
技术栈
本着技术人不说假话的原则,说说我的技术选型:
- 核心后端:Python + Django 6.0 强力驱动,轻量级 SQLite3 本地存储数据,单机起飞。
- 本地服务化:用了 Waitress 抗起生产环境,告别开发服务器的卡顿。
- 桌面壳子:用了
pywebview 包了一层。没搞 Electron 那么重,主要是为了调用系统原生的保存对话框(跨 Mac 和 Windows)。因为 WebView2 的右键菜单很难搞,所以里面的右键菜单劫持全都是我自己写 JS Bridge 扛下来的。
- 前端页面:原生 JS + Django Template,主打一个稳妥。外围宣传页是用 React 搞的。
关于那个“AI赋能模式”
大家在界面顶部可能会看到一个很酷炫的 AI 选项卡,叫什么“闻道(Window Inteligence)赋能模式(Beta)”。
[WARNING] 特别声明一下:这个 AI 功能纯粹是为了参加一个比赛才硬塞进去的!我自己都不爱用!
虽然它底层的活干得很足:
- 接了 OpenAI Function Calling,支持替换自定义的代理
Base URL。
- 能多轮对话、能查询学生信息、能直接发指令“把张三和李四的座位换一下”。
- 能自动生成“整体座位图卡片”、“学生详情图卡片”。
但是说实话,大家排个座位还是点鼠标拖拽来得爽。你要是觉得 AI 碍事,完全可以无视它。
优缺点
优点:
- 针对咱们电教委员痛点全部覆盖:排座、小组、导入导出、PPT预览。
- 纯本地运行:老师的学生成绩数据绝不上传,保护隐私,免得惹麻烦。
- 开源可魔改:代码随便看。
- 生态强兼:字面意思。
缺点(也就是我踩的坑):
- 为了做成桌面端,在
pywebview 里面手写了一大堆处理复制粘贴、右键菜单的 Hack 代码(没办法,WebView2的坑),以及奇奇怪怪的性能代码。
- 那个硬塞进去的 AI 的 UI 稍微显得有点精神分裂,就当是个彩蛋吧。
部署与下载
keynote 做的宣传视频昨天忘放上来了,今天补一下(4.5):
https://pan.577622.xyz/file.php?hash=a93060872101aa2effe5eefba5fb7c5c
(500 了就刷新一下)
对了,感谢 @Jbyccc 的 Star,给了我进入论坛的勇气。
