【问题标题】:Cannot stop arrows keys from echoing to the console in Python with the curses library使用 curses 库无法阻止箭头键回显到 Python 中的控制台
【发布时间】:2026-01-29 12:10:02
【问题描述】:

下面是我的代码。我正在尝试制作一个简单的文本编辑器,并尝试确保箭头键不会打印到控制台,但它仍然可以。有什么帮助吗?

import curses

text = []


def main(screen):
    curses.curs_set(1)
    curses.noecho()

    while True:
        newChar = screen.getkey()

        if newChar != curses.KEY_LEFT or curses.KEY_RIGHT or curses.KEY_UP or curses.KEY_DOWN:
            text.append(newChar)

        screen.addstr(0, 0, "".join(text))
        screen.refresh()


curses.wrapper(main)```

【问题讨论】:

    标签: python curses python-curses


    【解决方案1】:

    getkey 返回一个字符串;将其与curses.KEY_UP 等整数进行比较不会达到您的预期。

    这行得通:

    import curses
    
    text = []
    
    
    def main(screen):
        curses.curs_set(1)
        curses.noecho()
    
        while True:
            newChar = screen.getch()
            # newChar = screen.getkey()
    
            if newChar != curses.KEY_LEFT and curses.KEY_RIGHT and curses.KEY_UP and curses.KEY_DOWN:
                screen.addstr(0, 0, curses.keyname(newChar))
    
            screen.refresh()
    
    
    curses.wrapper(main)
    

    【讨论】:

      【解决方案2】:

      哎呀,我发现了问题所在。比较 if 语句中的值时出现问题。解决了我自己的问题。嘻嘻

      import curses
      
      text = []
      
      
      def main(screen):
              curses.curs_set(1)
      
              while True:
                  newChar = screen.getch()
      
                  if newChar not in [curses.KEY_LEFT, curses.KEY_RIGHT, curses.KEY_UP, curses.KEY_DOWN]:
                      screen.addstr(0, 0, curses.keyname(newChar))
                      screen.refresh()
      
      
      curses.wrapper(main)
      

      【讨论】:

        最近更新 更多