首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在stdscr中解释“输入”键(Python中的诅咒模块)

在stdscr中解释“输入”键(Python中的诅咒模块)
EN

Stack Overflow用户
提问于 2015-08-27 14:53:08
回答 1查看 9.8K关注 0票数 4

我正在使用Python的诅咒模块。在stdscr中,每当我按enter键时,诅咒就移动到同一行的第一列。我对此有几个问题。

  1. 原因是什么?
  2. 有没有办法把诅咒移到下一行?
  3. 如果我想在按回车键时执行某些事情(执行某些功能或什么),那么在“如果”条件下会出现什么情况?例如: if (确定是否按下ENTER的条件)# somecode
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 16:38:04

  1. 原因是什么?

您需要调用curses.noecho()作为初始化的一部分。

  1. 有没有办法把诅咒移到下一行?

screen.move(y,x)将移到一个绝对位置。screen.getyx()会告诉你你现在的位置。

  1. 如果我想在按回车键时执行某些事情(执行某些功能或什么),那么在“如果”条件下会出现什么情况?例如:

您可能认为可以调用getch()并将结果与KEY_ENTER进行比较。实际上,您需要检查更多的值。根据终端设置、使用的库和月亮的相位,您可能需要检查换行符(又名\n、^J、ASCII 10)或回车(\r、^M、ASCII 13)。

代码语言:javascript
复制
c = screen.getch()
if c == curses.KEY_ENTER or c == 10 or c == 13:
    # I hit ENTER

示例程序:

代码语言:javascript
复制
import curses

# Thanks, http://www.ipsum-generator.com
ipsum = '''Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer
nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla
quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent
mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum
lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent
per conubia nostra, per inceptos himenaeos.'''

try:
    # Standard startup. Probably don't need to change this
    screen = curses.initscr()
    curses.cbreak()
    curses.noecho()
    screen.keypad(True)

    # Silly program to write to the screen,
    # wait for either <ENTER> or <Q>.
    # On <ENTER>, mess with the screen.
    # On <Q>, exit.
    screen.addstr(0, 0, ipsum)
    screen.move(0, 0)
    screen.refresh()
    i = 0
    j = 0

    while True:
        c = screen.getch()
        if c == ord('q'):
            exit(0)
        if c == curses.KEY_ENTER or c == 10 or c == 13:
            i += 1
            if i % 3 == 0:
                screen.addstr(0, 0, ipsum.lower())
            if i % 3 == 1:
                screen.addstr(0, 0, ipsum.upper())
            if i % 3 == 2:
                screen.addstr(0, 0, ipsum)
            screen.move(0, 0)
        if c == curses.KEY_DOWN:
            y, x = screen.getyx()
            maxy, maxx = screen.getmaxyx()
            screen.move((y+1) % maxy, x)
        screen.refresh()


finally:
    # Standard shutdown. Probably don't need to change this.
    curses.nocbreak()
    screen.keypad(0)
    curses.echo()
    curses.endwin()

参考资料:

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32252733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档