Rob*_*Rob 4 python curses python-2.7 python-3.x python-curses
使用 Python,我正在尝试编写一个脚本,每当您按下空格键时,该脚本都会将所有键入的字符转换为 'a'。例如,我输入“python”然后输入空格,然后“python”将转换为“aaaaaa”。
import argparse
import curses
import time
# Main Function
def main():
screen=curses.initscr()
curses.cbreak()
screen.keypad(1)
curses.echo()
str_txt=''
count = 0
while True:
s=screen.getch()
if s != ord(' ') and s != ord('\x1b') and s != curses.KEY_BACKSPACE and s != curses.KEY_ENTER:
str_txt += chr(int(s))
count+=1
if s == ord(' '):
dim = screen.getyx()
h = 'a'*len(str_txt)+' '
screen.addstr(dim[0],dim[1]-count-1, h)
count=0
str_txt=''
screen.refresh()
if s == curses.KEY_ENTER or s==10 or s==13:
dim = screen.getyx()
screen.move(dim[0]+1,0)
screen.refresh()
#if s == curses.KEY_BACKSPACE:
# dim = screen.getyx()
# screen.move(dim[0],dim[1])
# screen.refresh()
if s == ord('\x1b'):
curses.endwin()
break
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于第一行,但是,在第二行中,每当我按空格键时,我都会在第 22 行收到一个错误,提示“_curses.error: addstr() 返回 ERR”
编辑:当我将 screen.addstr(dim[0],dim 1 -count-1, h) 更改为 screen.addstr(dim[0],dim 1 -count, h) 时,错误被消除,但输出不是我想要的是。我已附上输出供您参考。
小智 5
if s != ord(' ') and s != ord('\x1b') and s != curses.KEY_BACKSPACE:
str_txt += chr(int(s))
count+=1
Run Code Online (Sandbox Code Playgroud)
我认为 if 语句也为回车符和/或换行符执行,因此我认为由于第一行,您的计数比您预期的要高 1。
addstr() 返回的 ERR 异常是因为光标被移出屏幕(越界),原因是:
screen.addstr(dim[0],dim[1]-count-1, h)
Run Code Online (Sandbox Code Playgroud)
由于第一行末尾的回车符 (\r),您的计数为 +1。第一个 if 应该检查这个而不是增加计数。尝试将这些检查添加s!=curses.KEY_ENTER and s!=10 and s!=13到第一个 if 中,看看是否有帮助。s!=10将检查新行字符 (\n)(在这种情况下可能不需要,但我是强迫症)。s!=13将检查回车符 (\r)。
| 归档时间: |
|
| 查看次数: |
13177 次 |
| 最近记录: |