You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python终端实现上下箭头选择的选项列表及结果绑定方法

实现终端带上下箭头导航的选项选择功能(Python)

嘿,这个需求完全可以实现!我之前做过类似的趣味小工具,给你两种实用方案,分别对应「快速开发」和「零额外依赖」的场景:

方案一:用pick库(简单易上手)

这个第三方库专门用来做终端的交互式选择,一行代码就能搞定导航高亮,非常省心。

首先先安装库:

pip install pick

然后是示例代码,直接就能运行:

from pick import pick

# 定义你的选项列表
options = ['XXXXX', 'YYYYY', 'ZZZZZ']
title = '嘿,请从以下选项中选择:'

# 调用pick方法,返回选中的选项和对应的索引
selected_option, index = pick(options, title, indicator='➤', default_index=0)

# 把选中的内容绑定到变量,这里直接用selected_option就行
user_choice = selected_option

# 测试输出看看效果
print(f'你选中了:{user_choice},对应的序号是{index+1}')

运行后终端会显示带高亮的选项,用上下箭头切换,按回车确认,选中的内容直接存在user_choice变量里,完全符合你的需求~

方案二:用标准库curses(零额外依赖)

如果不想安装第三方库,Python自带的curses库也能实现,就是代码稍微多一点,但可控性更强。

示例代码如下:

import curses

def select_option(stdscr):
    # 初始化界面
    stdscr.clear()
    curses.curs_set(0)  # 隐藏光标
    options = ['1-XXXXX', '2-YYYYY', '3-ZZZZZ']
    current_row = 0

    while True:
        stdscr.clear()
        title = '嘿,请从以下选项中选择:'
        stdscr.addstr(0, 0, title)

        # 遍历选项,高亮当前选中的行
        for idx, option in enumerate(options):
            if idx == current_row:
                stdscr.addstr(idx+1, 0, option, curses.A_REVERSE)  # 反色高亮
            else:
                stdscr.addstr(idx+1, 0, option)

        # 监听键盘输入
        key = stdscr.getch()

        # 上下箭头切换选项
        if key == curses.KEY_UP and current_row > 0:
            current_row -= 1
        elif key == curses.KEY_DOWN and current_row < len(options)-1:
            current_row += 1
        elif key == curses.KEY_ENTER or key in [10, 13]:  # 回车确认
            return options[current_row]

# 启动curses应用
selected = curses.wrapper(select_option)

# 绑定到变量
user_choice = selected
print(f'你选中了:{user_choice}')

这个代码运行后,同样能用上下箭头导航选中高亮的选项,回车确认后,选中的内容会存在user_choice变量里,不需要额外安装任何库~

两种方案都能完美实现你的需求,要是追求快就用pick,要是想纯标准库就用curses,看你偏好啦!

内容的提问来源于stack exchange,提问作者Raeed Mndow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:36:42