while 1:
...
window.addstr(0, 0, 'abcd')
window.refresh()
...
window
尺寸为完整的终端尺寸,足以容纳abcd
。
如果将'abcd'
修改为较短的字符串'xyz'
,则在终端上我会看到'xyzd'
。究竟我做错了什么?
答案 0 :(得分:5)
addstr()仅打印您指定的字符串,不会清除以下字符。你必须自己做:
要清除字符直到行尾,请使用clrtoeol(),
要清除字符直到窗口结束,请使用clrtobot()。
答案 1 :(得分:3)
假设您有这段代码,而您只想知道如何实施draw()
:
def draw(window, string):
window.addstr(0, 0, string)
window.refresh()
draw(window, 'abcd')
draw(window, 'xyz') # oops! prints "xyzd"!
最直截了当的“curses-ish”解决方案绝对是
def draw(window, string):
window.erase() # erase the old contents of the window
window.addstr(0, 0, string)
window.refresh()
你可能会想要写这个:
def draw(window, string):
window.clear() # zap the whole screen
window.addstr(0, 0, string)
window.refresh()
但不要!尽管看起来很友好,clear()
实际上只适用于when you want the entire screen to get redrawn unconditionally,,即“闪烁”。 erase()
函数在没有闪烁的情况下做正确的事。
FrédéricHamidi提供以下解决方案,用于删除当前窗口的一部分:
def draw(window, string):
window.addstr(0, 0, string)
window.clrtoeol() # clear the rest of the line
window.refresh()
def draw(window, string):
window.addstr(0, 0, string)
window.clrtobot() # clear the rest of the line AND the lines below this line
window.refresh()
较短且纯粹的Python替代方案是
def draw(window, string):
window.addstr(0, 0, '%-10s' % string) # overwrite the old stuff with spaces
window.refresh()
答案 2 :(得分:2)
我使用oScreen.erase()
。它清除窗口并将光标放回0,0