Как создать навигационное меню выбора в PythonPython

Программы на Python
Ответить
Anonymous
 Как создать навигационное меню выбора в Python

Сообщение Anonymous »

Я хочу создать в Python навигационное меню выбора, в котором пользователь может выбрать вариант, перемещаясь с помощью клавиш со стрелками вверх и вниз. Я знаю, что несколько библиотек могут сделать то же самое, но я хочу сделать это сам, потому что мне нужно больше возможностей настройки. Мне удалось его сделать, и вот мой код:

Код: Выделить всё

from rich.console import Console
import keyboard
import time
import os

console = Console()

def clear_screen():
os.system('cls' if os.name == "nt" else "clear")

def select(prompt, options):

clear_screen()
previous_option = None
current_option = 0

while True:
time.sleep(0.075)

if previous_option != current_option:

console.clear()
console.print(f"\n{prompt}\n")

for index, option in enumerate(options):
if index == current_option:
console.print(f" > {option} < ", style = "bright_green")
else:
console.print(f"   {option}   ")

console.print("\nUse the arrow keys to select an option\nPress enter to confirm your selection")

previous_option = current_option

if keyboard.is_pressed("up"):
current_option = (current_option - 1) % len(options)

elif keyboard.is_pressed("down"):
current_option = (current_option + 1) % len(options)

elif keyboard.is_pressed("enter"):
clear_screen()
return options[current_option]

def main():

console.print("Welcome")

fruit_options = ["Apple", "Orange", "Banana", "Mango"]
favorite_fruit = select("Which is your favorite fruit?", fruit_options)

console.print(f"Your favorite fruit is {favorite_fruit}")

if __name__ == "__main__":
main()
Он работает отлично, но есть только одна проблема. Он очищает все ранее напечатанные строки. В моем коде перед отображением меню выбора должно быть напечатано «Добро пожаловать». Я могу заставить функцию select печатать то же самое, но это невозможно, если имеется много напечатанных строк и пользовательских данных. Я хочу очищать меню выбора только при каждом нажатии клавиши со стрелкой, но мой код очищает весь экран. Я пробовал использовать escape-коды ANSI, чтобы очистить только часть экрана, они работают хорошо, но единственная проблема заключается в том, что мой код зависает и сильно мерцает всякий раз, когда я его запускаю. Есть ли альтернативный способ очистить только часть экрана?


Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»