gpt4 book ai didi

python - 当 addstr 到 9、9 时,ncurses 10,10 pad 会导致错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:27 26 4
gpt4 key购买 nike

在声明 10 x 10 pad 之后,我显然无法写入右下角 9、9 而不会出现错误。这是怎么回事?

import curses

def start(stdscr):
curses.curs_set(0)
movement = curses.newpad(10, 10)

movement.addstr(8, 9, '+')
movement.addstr(9, 8, '+')
movement.addstr(9, 9, '+') #This line causes an error

if __name__ == '__main__':
curses.wrapper(start)

原因:

  File "curses_movement_testing.py", line 35, in <module>
curses.wrapper(start)
File "/usr/lib64/python2.6/curses/wrapper.py", line 43, in wrapper
return func(stdscr, *args, **kwds)
File "curses_movement_testing.py", line 10, in start
movement.addstr(9, 9, '+')
_curses.error: addstr() returned ERR

为什么我不能写入右下角的单元格?

最佳答案

问题是添加的字符导致尝试滚动垫,并且滚动被禁用。角色已成功添加(至少在我系统的 ncurses 实现中):如果您发现错误并更新屏幕,您应该会看到它:

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),不会有错误但是窗口会滚动:可能不是你想要的。

由于 pad 可以比实际屏幕大,一个简单的解决方案是在您要刷新的部分下方添加额外的一行。您可以检查是否写入了不会显示的部分。这是最后一个示例:

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 运行,加号出现;以 python cursesx.py foo 运行,出现 ftoolong 消息;以 python cursesx.py waytoolongtofit 运行,wCAUGHTtoolong 消息都会出现。

关于python - 当 addstr 到 9、9 时,ncurses 10,10 pad 会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16763653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com