【问题标题】:Make text appear immediately on key press使文本在按键时立即出现
【发布时间】:2021-05-07 01:13:16
【问题描述】:

我正在制作一个基于文本的游戏,我希望用户能够在文本逐字母出现时按 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 ("insert\n"
  "text\n"
  "here\n")

  
  input("\n[Press enter to continue]\n")

  print ("insert\n"
  "text\n"
  "here\n")

  input("\n[Press enter to continue]\n")

sceneOne()

我希望“按 Enter 继续”文本位于“在此处插入文本”下方,同时文本逐字母显示,这样如果用户已经玩过游戏并且想要速度贯穿这部分以更快地到达下一个选择。

【问题讨论】:

  • 我的感觉是使用 input() 方法很难完成,因为它适用于简单的“模态”(中断程序流程)输入任务。也许这个keyboard 库会更好pypi.org/project/keyboard
  • 使用普通的print()input() 您无法控制显示文本的位置 - 您无法移动到上一行来显示文本。在某些控制台/终端上,您可以使用 print() 中的特殊代码将光标移动到任何位置。这被cursesurwind 等模块使用。除了input() 阻塞代码,你的print() 也阻塞代码,它们必须在单独的线程中运行。也许curses 有方法检查输入中是否有新字符而不会阻塞代码 - 或者在 Python 中查找 getchargetch

标签: python text enter


【解决方案1】:

安装键盘模块,然后你可以创建一个事件监听器。然后,修改打印功能,使其在按下回车时不会休眠。见下文:

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)

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2021-05-01
    • 2013-12-09
    相关资源
    最近更新 更多