Предположим, у вас есть этот код, и вы просто хотите знать, как реализовать draw()
:
def draw(window, string):
window.addstr(0, 0, string)
window.refresh()
draw(window, 'abcd')
draw(window, 'xyz') # oops! prints "xyzd"!
Самым простым и "проклятым" решением, безусловно, является
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()
действительно только для , когда вы хотите, чтобы весь экран перерисовывался безоговорочно, , то есть, "мерцание". Функция erase()
делает все правильно, без мерцания.
Фредерик Хамиди предлагает следующие решения для удаления только части текущего окна:
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()