Supongamos que tiene este código, y lo que desea saber cómo implementar draw()
:
def draw(window, string):
window.addstr(0, 0, string)
window.refresh()
draw(window, 'abcd')
draw(window, 'xyz') # oops! prints "xyzd"!
El más sencillo y "maldiciones-ish "la solución es, sin duda
def draw(window, string):
window.erase() # erase the old contents of the window
window.addstr(0, 0, string)
window.refresh()
Usted puede verse tentado a escribir esto en su lugar:
def draw(window, string):
window.clear() # zap the whole screen
window.addstr(0, 0, string)
window.refresh()
¡Pero no lo hagas! A pesar del nombre de apariencia amigable, clear()
es realmente solo para when you want the entire screen to get redrawn unconditionally, es decir, "parpadeo". La función erase()
hace lo correcto sin parpadeo.
Frédéric Hamidi ofrece las siguientes soluciones para borrar sólo una parte (s) de la ventana actual:
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()
Una alternativa más corta y puro en Python sería
def draw(window, string):
window.addstr(0, 0, '%-10s' % string) # overwrite the old stuff with spaces
window.refresh()
Tiene que ser hecho antes 'actualizar' o después? – Pablo
Antes de 'refresh()' y después de 'addstr()' (todas estas operaciones solo actualizan la pantalla de maldiciones "virtuales" hasta que se llame a 'refresh()'). –