Dan*_*Dan 3 python ncurses python-curses
在宣布一个10×10的垫后,我显然无法写入右下角,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)
Run Code Online (Sandbox Code Playgroud)
原因:
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
Run Code Online (Sandbox Code Playgroud)
为什么我不能写到右下角的单元格?
问题是添加的角色导致尝试滚动打击垫,并且滚动被禁用.该角色已成功添加(至少在我的系统的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)
Run Code Online (Sandbox Code Playgroud)
如果你movement.scrollok(True)在写到右下角之前打电话,就没有错误,但是窗口会滚动:可能不是你想要的.
由于垫可能比实际屏幕大,一个简单的解决方案是在您将要的部件下方添加额外的线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)
Run Code Online (Sandbox Code Playgroud)
运行,python cursesx.py并出现优点; 作为运行python cursesx.py foo和f与toolong消息出现; 作为运行python cursesx.py waytoolongtofit和w,CAUGHT以及toolong消息的所有出现.
| 归档时间: |
|
| 查看次数: |
1730 次 |
| 最近记录: |