[英]_curses.error: addstr() returned ERR
使用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()
上面的代碼適用於第一行,但是,在第二行,每當我按空格鍵時,我在第22行收到錯誤,說“_curses.error:addstr()返回ERR”
編輯:當我將screen.addstr(dim [0],dim 1 -count-1,h)更改為screen.addstr(dim [0],dim 1 -count,h)時,錯誤被消除但輸出不是我想要的是。 我已附加輸出供您參考。
if s != ord(' ') and s != ord('\x1b') and s != curses.KEY_BACKSPACE:
str_txt += chr(int(s))
count+=1
我認為if語句也是為回車符和/或換行符號執行的,所以我認為你的計數比你預期的要多1,因為第一行。
addstr()返回ERR異常是因為光標被移出屏幕(越界),原因是:
screen.addstr(dim[0],dim[1]-count-1, h)
由於第一行末尾的回車符(\\ r),您的計數為+1。 第一個if應該檢查這個而不是增加計數。 嘗試添加這些檢查s!=curses.KEY_ENTER and s!=10 and s!=13
到第一個if,看看是否有幫助。 s!=10
將檢查新行char(\\ n)(在這種情況下可能沒有必要,但我是強迫症)。 s!=13
將檢查回車符(\\ r)。
有不止一個地方可以改進給定的例子。 這是修訂版:
import curses
import time
# Main Function
def main():
screen=curses.initscr()
curses.cbreak()
screen.keypad(1)
curses.echo()
screen.scrollok(1)
str_txt=''
count = 0
while True:
dim = screen.getyx()
s=screen.getch()
if s != ord(' ') and s != ord('\x1b') and s != curses.KEY_BACKSPACE and s != curses.KEY_ENTER and s != 10 and s != 13:
str_txt += chr(int(s))
count+=1
if s == ord(' '):
if count > 0:
h = 'a'*len(str_txt)+' '
screen.addstr(dim[0],dim[1]-count, h)
count=0
str_txt=''
if s == curses.KEY_ENTER or s==10 or s==13:
if count > 0:
h = 'a'*len(str_txt)
screen.addstr(dim[0],dim[1]-count, h)
count=0
str_txt=''
screen.move(dim[0]+1,0)
count=0
str_txt=''
#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()
例如:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.