pick:终端交互式选择列表,两行代码搞定

pick:终端交互式选择列表,两行代码搞定

正文顶部截图

写 CLI 工具时,让用户在终端里从一堆选项中做选择,是一个高频需求。手写交互逻辑要处理键盘输入、光标移动、高亮显示,代码量不小。

wong2 开发的 pick 把这件事封装成了两行 Python 代码。项目目前在 GitHub 上有 790 个 Star。

README区域截图

它能做什么

pick 是一个轻量级 Python 库,专门在终端里创建交互式选择列表。单选和多选都支持,界面干净,操作直觉。

基本用法:

from pick import pick

title = 'Please choose your favorite programming language: '
options = ['Java', 'JavaScript', 'Python', 'PHP', 'C++', 'Erlang', 'Haskell']
option, index = pick(options, title)
print(option)
print(index)

运行后终端会显示一个可上下移动的选择列表。用户用方向键导航,回车确认,pick 返回选中的项和索引。

多选模式同样简洁:

selected = pick(options, title, multiselect=True, min_selection_count=1)

按空格选中或取消,回车提交。min_selection_count 限制至少选几项才能确认,避免空提交。

技术细节

pick 默认使用 curses 作为渲染后端。curses 是 Unix 系统上处理终端界面的标准库,几乎所有 Linux 和 macOS 都自带,不需要额外安装依赖。

如果偏好 blessed 库,pick 也提供了切换方式。安装时带上可选依赖:

pip install "pick[blessed]"

调用时指定 backend="blessed" 即可。blessed 在 Windows 兼容性和色彩支持上比 curses 更友好一些。

可配置项

pick 的 API 保持了小而精的风格,暴露了恰到好处的配置项:

  • options:选项列表
  • title:列表上方的提示标题
  • indicator:选中项指示符,默认是 *,可改为 > 或其他字符
  • default_index:设置默认选中项,不传默认选第一项
  • multiselect:开启多选
  • min_selection_count:多选模式下最少需选中的项数
  • screen:在已有 curses 应用中嵌入 pick 时,可传入 screen 对象避免重复初始化
  • position:指定列表起始显示位置,适合复杂终端布局中的精确定位
  • quit_keys:自定义退出快捷键
  • backend:选择渲染后端

后三个参数(screen、position、quit_keys)说明 pick 对嵌入已有终端应用的场景做了认真考虑,不只是当作独立选择器来用。

安装

支持 Python 3.8 到 3.14:

pip install pick

零额外依赖即可使用。只有需要 blessed 后端时才加 [blessed] 扩展。

社区衍生

pickpack 是基于 pick 的一个 fork,扩展了树形数据的选择功能,适合需要层级选择的场景。

小结

pick 解决的是一个具体且常见的问题:在终端里做交互选择。它没有试图成为全能 TUI 框架,API 表面积很小,学习成本几乎为零。对于写 CLI 脚本时需要内嵌选择列表的场景,pick 是直接可用的选项。

posted @ 2026-06-17 08:34  cloudnine36  阅读(39)  评论(0)    收藏  举报