1 回答

TA貢獻1856條經(jīng)驗 獲得超5個贊
問題在于添加的字符會導致滾動鍵盤的嘗試,并且滾動被禁用。字符已成功添加(至少在我的系統(tǒng)的ncurses實現(xiàn)中):如果發(fā)現(xiàn)錯誤并更新了屏幕,則應該看到它:
import curses, time
def start(stdscr):
curses.start_color()
try:
curses.curs_set(0)
except curses.error:
pass
movement = curses.newpad(10, 10)
movement.addstr(8, 9, '+')
movement.addstr(9, 8, '+')
try:
movement.addstr(9, 9, '+')
except curses.error:
movement.addstr(0, 0, 'CAUGHT')
movement.refresh(0, 0, 0, 0, 9, 9)
curses.doupdate()
time.sleep(1)
if __name__ == '__main__':
curses.wrapper(start)
如果movement.scrollok(True)在寫到右下角之前先調(diào)用,則不會有任何錯誤,但窗口會滾動:可能不是您想要的。
由于墊板可能比實際屏幕大,因此一個簡單的解決方案是在要加工的零件下方添加一條額外的線refresh。您可以檢查是否已寫入不會顯示的部分。這是最后一個例子:
import curses, sys, time
def start(stdscr):
curses.start_color()
try:
curses.curs_set(0)
except curses.error:
pass
movement = curses.newpad(11, 10)
movement.addstr(8, 9, '+')
movement.addstr(9, 8, '+')
text = sys.argv[1] if len(sys.argv) > 1 else '+'
try:
movement.addstr(9, 9, text)
y, x = movement.getyx()
except curses.error:
y, x = movement.getyx()
movement.addstr(0, 0, 'CAUGHT')
if y >= 10 and x > 0:
movement.addstr(1, 0, 'toolong')
movement.refresh(0, 0, 0, 0, 9, 9)
curses.doupdate()
time.sleep(1)
if __name__ == '__main__':
curses.wrapper(start)
運行為python cursesx.py,出現(xiàn)加號;運行為python cursesx.py foo,f并且toolong出現(xiàn)和消息;作為運行python cursesx.py waytoolongtofit和w,CAUGHT以及toolong消息的所有出現(xiàn)。
添加回答
舉報