解释;输入“;stdscr中的按键(Python中的curses模块)

解释;输入“;stdscr中的按键(Python中的curses模块),python,python-2.7,python-3.x,curses,python-curses,Python,Python 2.7,Python 3.x,Curses,Python Curses,我正在使用Python的诅咒模块。 在stdscr中,每当我按enter键时,curse就会移动到同一行的第一列。关于这件事,我有几个问题 原因是什么 有没有办法把诅咒移到下一行 如果我想在回车键上做某些事情(执行某些功能或某事),那么在“如果”条件下会出现什么情况?e、 g if (condition which will determine if ENTER was pressed or not) somecode 原因是什么 您需要调用curses.noecho()作为初始化的

我正在使用Python的诅咒模块。 在stdscr中,每当我按enter键时,curse就会移动到同一行的第一列。关于这件事,我有几个问题

  • 原因是什么
  • 有没有办法把诅咒移到下一行
  • 如果我想在回车键上做某些事情(执行某些功能或某事),那么在“如果”条件下会出现什么情况?e、 g

    if (condition which will determine if ENTER was pressed or not)
        somecode
    
  • 原因是什么

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

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

    stdscr.move(y,x)
    将移动到绝对位置
    stdscr.getyx()
    将告诉您当前位置

    如果我想在回车键上做某些事情(执行某些功能或某事),那么在“如果”条件下会出现什么情况?e、 g

    if (condition which will determine if ENTER was pressed or not)
        somecode
    
    您可能认为可以调用
    getch()
    并将结果与
    KEY\u ENTER
    进行比较。实际上,您需要检查更多的值。根据您的终端设置、使用的库以及月相,您可能需要检查换行符(aka
    \n
    ,^J,ASCII 10)或回车符(
    \r
    ,^M,ASCII 13)

    示例程序:

    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
        stdscr = curses.initscr()
        curses.cbreak()
        curses.noecho()
        stdscr.keypad(1)
    
        # Silly program to write to the screen,
        # wait for either <ENTER> or <Q>.
        # On <ENTER>, mess with the screen.
        # On <Q>, exit.
        stdscr.addstr(0, 0, ipsum)
        stdscr.move(0, 0)
        stdscr.refresh()
        i = 0
        j = 0
    
        while 1:
            c = stdscr.getch()
            if c == ord('q'):
                exit(0)
            if c == curses.KEY_ENTER or c == 10 or c == 13:
                i += 1
                if i % 3 == 0:
                    stdscr.addstr(0, 0, ipsum.lower())
                if i % 3 == 1:
                    stdscr.addstr(0, 0, ipsum.upper())
                if i % 3 == 2:
                    stdscr.addstr(0, 0, ipsum)
                stdscr.move(0, 0)
            if c == curses.KEY_DOWN:
                y, x = stdscr.getyx()
                maxy, maxx = stdscr.getmaxyx()
                stdscr.move((y+1) % maxy, x)
            stdscr.refresh()
    
    
    finally:
        # Standard shutdown. Probably don't need to change this.
        curses.nocbreak()
        stdscr.keypad(0)
        curses.echo()
        curses.endwin()
    
    导入诅咒
    #谢谢,http://www.ipsum-generator.com
    ipsum=''Lorem ipsum Door sit amet,奉献给精英们。整数
    nec奥迪奥。自由女神。这是一个直径较大的曲线。塞德·尼西。纳拉
    nibh elementum公司的quis sem。同侧矢状肌。普拉森特
    莫里斯。他告诉我们,这是奥古斯特·森佩尔·波尔塔。毛里斯·马萨。前庭
    紫罗兰。类适用于taciti Sociasqu和litora Tournt
    每一个科努比亚·诺斯特拉,每一个伊塞普托斯·希梅纳奥斯。”
    尝试:
    #标准启动。可能不需要改变这个
    stdscr=curses.initscr()
    诅咒
    诅咒
    stdscr.键盘(1)
    #愚蠢的程序写在屏幕上,
    #要么等待,要么等待。
    #打开,弄乱屏幕。
    #打开,退出。
    stdscr.addstr(0,0,ipsum)
    stdscr.move(0,0)
    stdscr.refresh()
    i=0
    j=0
    而1:
    c=stdscr.getch()
    如果c==ord('q'):
    出口(0)
    如果c==curses.KEY\u输入或c==10或c==13:
    i+=1
    如果i%3==0:
    stdscr.addstr(0,0,ipsum.lower())
    如果i%3==1:
    stdscr.addstr(0,0,ipsum.upper())
    如果i%3==2:
    stdscr.addstr(0,0,ipsum)
    stdscr.move(0,0)
    如果c==curses.KEY_向下:
    y、 x=stdscr.getyx()
    maxy,maxx=stdscr.getmaxyx()
    stdscr.移动((y+1)%maxy,x)
    stdscr.refresh()
    最后:
    #标准关机。可能不需要改变这个。
    诅咒
    stdscr.键盘(0)
    诅咒
    诅咒
    
    参考:

    • 谷歌“诅咒键盘输入”

    请提供尽可能短的完整程序来演示您的问题。有关如何以及为什么创建一个简短示例的更多信息,请参见。有关如何提出一个好问题的更多信息,请参见。除了“或c==10或c==13”之外,我编写了完全相同的代码。为什么我们需要检查额外的值?你能详细说明一下这一点吗?对不起,我不知道为什么有时候按键有效,有时候不起作用。不过,我在答案中添加了一些文字。
    KEY\u ENTER
    指的是数字键盘上的ENTER键,与主qwerty键盘上的ENTER键无关。通常后者会给出一个换行符(10,
    \n
    ),因为这是Unix约定。检查回车(13,
    \r
    )不会有任何危害。