python - python中的控制台选择菜单
问题描述
我有一个想法在 python 中创建一个控制台选择菜单,如下所示:
Choose an option:
> 1. Do something 1 <
2. Do something 2
3. Do something 3
4. Do something 4
如果我按向上箭头键,什么也不会发生。如果我按下下一个,小于和大于符号会像这样上下移动:
Choose an option:
1. Do something 1
> 2. Do something 2 <
3. Do something 3
4. Do something 4
但我不知道哪个 Python 3 模块可以帮助我抓住按键而不是input()
,并且不知道如何正确对齐它。
我的对齐解决方案是打印空格(也许?),当按键事件被捕获时,控制台将被清除并再次打印选择菜单而不是更改/修改字符串。
此外,选项将从列表中获取,这意味着此菜单是可扩展的
解决方案
您必须检测键盘键。因为这个检测python中的按键?提到的答案,Python 有一个键盘模块。
您可以使用这些命令安装它
pip install keyboard
这是它的工作原理
- 定义一个菜单编号范围,在本例中为 1 到 4
- 设置一个默认选择的菜单,并用我们定义的数字来表示,所以当用户打开菜单时它会出现,在本例中为 1
- 如果用户按下Up键,您将减少选定的菜单编号,除非它位于范围的第一个元素上。反之亦然,对于Down键,您可以递增所选菜单编号,除非它位于范围的最后一个元素上。
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()
推荐阅读
- javascript - Vue-Router 将数据传递给另一个组件
- javascript - 错误 TS:2339 类型 {} 上不存在属性“项目”
- javascript - 付款后在主窗口重定向
- r - 更改 R 中 S3 方法的默认参数
- ios - 从 UIWebView 切换到 WKWebView 时出错
- azure-devops - Microsoft VSTS 燃尽图类似于 Atlassian JIRA 燃尽图
- npm - 解析 JSON 时出错 - JSON5 数据的第 1 行第 2 列出现意外的 EOF。当我 npm 运行构建时
- php - 重命名服务器文件错误(http 包装器不支持重命名)[PHP]
- c# - SaveChanges() 长事务中的“基础提供程序在打开时失败”错误
- c# - 如何在方法中将密码作为参数传递