J'ai (avec l'aide de mon pote @Nuclearman qui a répondu à une de mes autres questions) partiellement mis en place une fonction de refaire dans mon programme, qui est un programme graphique de tortue qui dessine toute lettre appuyée sur le clavier la toile graphique tortue. Je dis «en partie» parce que, bien qu'il refait, il ne fait pas ce à quoi il était destiné, qui remplace la dernière lettre annulée par une nouvelle si l'utilisateur l'appelle. Par exemple, supposons que vous ayez écrit "BONJOUR" sur la toile et que vous ayez désactivé "H". Vous avez ensuite voulu remplacer le "E", avec, disons, un "A". Alors vous dessinez un "A". Lorsque vous appuyez sur refaire, il est censé montrer "HAL" à droite? Eh bien, ce n'est pas le cas avec mon refaire. Mon redo place, suivant l'exemple que je donnais, sorties ceci:Comment implémenter l'écrasement dans ma fonction "Rétablir" en Python?
Il attire l'E sur A! Eh bien, ce n'est pas ce à quoi le redo est destiné! Alors, comment faire pour que la tortue dessine "HAL" au lieu de ce qui se passe dans l'image ci-dessus et implémente cette basée sur ma fonction actuelle de refaire montrée ci-dessous? Toute aide est grandement appréciée! :)
Mon Redo:
def Clear():
# Clear the canvas
clear()
speed(0)
tracer(0,0)
def redoHandler():
if undoHandler.handling == True and draw.drawing == True and len(newerdeq) > 0:
# "newerdeq" is my 'forward' stack for the redo to be possible
redoHandler.handling = True
if not hasattr(redoHandler, "counter"):
redoHandler.counter = 0
redoHandler.counter += 1
draw.counter += 1
print("`draw` has been called {} times.".format(draw.counter))
Clear()
ui = newerdeq.pop() #<-- Pop redone items...
function.append(ui) #<-- back to the "undo" function stack.
penup()
try:
goto(o,p)
except:
goto(-200, 100)
pendown()
try:
# Now execute all the items (from an earlier queue that all letter functions go to first) if defined as a Point class or as a function
for i in function:
k = i.getXY()
penup()
goto(k)
pendown()
hk = i.getletterheight()
global letter_height
letter_height = hk
rk = i.getletterwidth()
global letter_width
letter_width = rk
hw = i.getwidth()
width(hw)
op = i.getcolor()
try:
color(op)
except:
for g in colors:
cp = g.getcolor2()
colormode(255)
color(cp)
j = i.getfunction()
j()
except:
i()
update()
Le cas est, lorsque vous défaisait à H, la prochaine redo action en attente est E, ce qui est supposé être. Lorsque vous entrez A, l'action de rétablissement n'est toujours pas modifiée. Je pense que ce que vous voulez, c'est quand vous entrez une lettre, vous devez supprimer l'action up-pending, l'action suivante sera H. Cela signifie que lorsque vous entrez une lettre, appelez newerdeq.pop() – xfx
@xfx Eh bien, C'était aussi simple que ça. C'est réparé. Merci. –