Question

while 1:
    ...
    window.addstr(0, 0, 'abcd')
    window.refresh()
    ...

window la taille est la taille complète du terminal, assez grande pour contenir abcd.Si 'abcd' est modifié en chaîne plus courte comme 'xyz', puis sur le terminal je verrai 'xyzd'.Qu'est-ce que je fais de mal exactement ?

Était-ce utile?

La solution

addstr () n'imprime que la chaîne que vous spécifiez,Il n'efface pas les caractères suivants.Vous devrez faire cela vous-même:

  • Pour effacer les caractères jusqu'à la fin de la ligne, utilisez clrtoeol () ,

  • Pour effacer les caractères jusqu'à la fin de la fenêtre, utilisez clrtobot () .

Autres conseils

Supposons que vous ayez ce code et que vous vouliez simplement savoir comment l'implémenter draw():

def draw(window, string):
    window.addstr(0, 0, string)
    window.refresh()

draw(window, 'abcd')
draw(window, 'xyz')  # oops! prints "xyzd"!

La solution la plus simple et la plus « malédiction » est certainement

def draw(window, string):
    window.erase()  # erase the old contents of the window
    window.addstr(0, 0, string)
    window.refresh()

Vous pourriez être tenté d'écrire ceci à la place :

def draw(window, string):
    window.clear()  # zap the whole screen
    window.addstr(0, 0, string)
    window.refresh()

Mais ne le faites pas !Malgré le nom sympathique, clear() est vraiment seulement pour lorsque vous souhaitez que tout l'écran soit redessiné sans condition, c'est-à-dire "scintillement".Le erase() la fonction fait la bonne chose sans scintillement.

Frédéric Hamidi propose les solutions suivantes pour effacer seulement une ou plusieurs parties de la fenêtre en cours :

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()

Une alternative plus courte et purement Python serait

def draw(window, string):
    window.addstr(0, 0, '%-10s' % string)  # overwrite the old stuff with spaces
    window.refresh()

j'utilise oScreen.erase().Il efface la fenêtre et remet le curseur à 0,0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top