python中的控制台选择菜单

inf*_*ion 4 python algorithm

我有一个想法在 python 中创建一个控制台选择菜单,如下所示:

Choose an option:
> 1. Do something 1 <
  2. Do something 2
  3. Do something 3
  4. Do something 4
Run Code Online (Sandbox Code Playgroud)

如果我按向上箭头键,则没有任何反应。如果我按下一个,小于和大于符号会像这样上下移动:

Choose an option:
  1. Do something 1 
> 2. Do something 2 <
  3. Do something 3
  4. Do something 4
Run Code Online (Sandbox Code Playgroud)

但我不知道哪个 Python 3 模块可以帮助我捕捉按键而不是input(),并且不知道如何正确对齐它。

我的对齐解决方案是打印空格(也许?),当按键事件被捕获时,控制台将被清除并再次打印选择菜单而不是更改/修改字符串。

此外,选项将从列表中获取,这意味着此菜单是可扩展的

won*_*ng2 18

pick我为此编写了一个Python模块,它有一个易于使用的api并且支持Windows

https://github.com/wong2/pick

from pick import pick

title = 'Please choose your favorite programming language: '
options = ['Java', 'JavaScript', 'Python', 'PHP', 'C++', 'Erlang', 'Haskell']

option, index = pick(options, title, indicator='=>', default_index=2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


And*_*dra 5

您必须检测键盘键。因为这会检测python中的按键?提到的答案,Python 有一个键盘模块。

您可以使用这些命令安装它

pip install keyboard
Run Code Online (Sandbox Code Playgroud)

这是它的工作原理

  • 定义菜单编号范围,在本例中为 1 到 4
  • 设置一个默认选中的菜单,并用我们定义的数字来表示,这样在用户打开菜单时就会出现,本例中为1
  • 如果用户按下向上键,您将减少所选菜单编号,除非它已位于范围的第一个元素上。反之亦然,对于向下键,您增加了所选菜单编号,除非它已位于范围的最后一个元素上。
import keyboard

selected = 1

def show_menu():
    global selected
    print("\n" * 30)
    print("Choose an option:")
    for i in range(1, 5):
        print("{1} {0}. Do something {0} {2}".format(i, ">" if selected == i else " ", "<" if selected == i else " "))

def up():
    global selected
    if selected == 1:
        return
    selected -= 1
    show_menu()

def down():
    global selected
    if selected == 4:
        return
    selected += 1
    show_menu()

show_menu()
keyboard.add_hotkey('up', up)
keyboard.add_hotkey('down', down)
keyboard.wait()
Run Code Online (Sandbox Code Playgroud)

样本


小智 5

上述过程使代码更加混乱,并且需要 root 权限才能在 Linux 上运行。最好的方法是使用查询

pip3 install enquiries

并使用以下代码

import enquiries

options = ['Do Something 1', 'Do Something 2', 'Do Something 3']
choice = enquiries.choose('Choose one of these options: ', options)

print(choice)
Run Code Online (Sandbox Code Playgroud)

  • 致未来的读者:截至 2020 年,它不支持 Windows (7认同)