#python #text #enter
#python #текст #введите
Вопрос:
Я создаю текстовую игру, и я хочу, чтобы пользователь мог нажимать enter, пока текст отображается по буквам, чтобы оставшаяся часть текста отображалась немедленно.
Пока это мой код
import time
import sys
def print(s):
for c in s:
sys.stdout.write(c)
sys.stdout.flush()
time.sleep(0.01)
def sceneOne():
print ("insertn"
"textn"
"heren")
input("n[Press enter to continue]n")
print ("insertn"
"textn"
"heren")
input("n[Press enter to continue]n")
sceneOne()
Я хочу, чтобы текст «Нажмите enter, чтобы продолжить» находился под текстом «вставить текст здесь», пока текст отображается по буквам, чтобы пользователь мог ускорить отображение текста, если он уже играл в игру и хочет ускорить прохождение этой части, чтобы быстрее перейти к следующему выбору.
Комментарии:
1. Я чувствую, что это будет сложно выполнить с помощью метода input(), поскольку он предназначен для простых «модальных» (прерывающих поток программы) задач ввода. Возможно, эта
keyboard
библиотека будет работать лучше pypi.org/project/keyboard2. используя обычный
print()
, иinput()
вы не можете контролировать, где вы отображаете текст — вы не можете перейти к предыдущей строке для отображения текста. На некоторых консолях / терминалах вы можете использовать специальные кодыprint()
для перемещения курсора в любом месте. И это используется такими модулями, как curses , urwind . Кромеinput()
того, блокирует код, и вашprint()
код также блокирует код, и они должны выполняться в отдельных потоках. возможноcurses
, есть способ проверить, есть ли новый символ во вводе без блокирующего кода — или искатьgetchar
orgetch
в Python
Ответ №1:
установите модуль клавиатуры, а затем вы можете создать прослушиватель событий. Затем измените функцию печати, чтобы она не переходила в режим ожидания, если они нажмут enter. Смотрите ниже:
def print(s):
for c in s:
if keyboard.is_pressed('enter'):
sys.stdout.write(c)
sys.stdout.flush()
else:
sys.stdout.write(c)
sys.stdout.flush()
time.sleep(0.05)