Я (вместе с помощью моего приятеля @Nuclearman, который ответил на один из моих других вопросов) частично реализовал функцию повтора в моей программе, которая представляет собой графическую программу черепахи, которая рисует любую букву, нажатую на клавиатуре, нажатую пользователем, на черепаху графическое полотно. Я говорю «частично», потому что, хотя он и повторяет, он не делает того, для чего он был предназначен, а именно перезаписывает последнюю отмененную букву новой, если она вызывается пользователем. Например, предположим, что вы написали на холсте «HELLO» и расстегнули его до «H». Затем вы хотели заменить «Е», скажем, на «А». Итак, вы рисуете букву «А». Когда вы нажимаете «Повторить», теперь должно отображаться «HAL», верно? Ну, это не тот случай с моей переделкой. Мой повтор вместо этого, следуя приведенному мной примеру, выводит это:
Он рисует E над A! Ну, это не то, для чего предназначен повтор! Итак, как мне сделать так, чтобы черепашка рисовала «HAL» вместо того, что происходит на изображении выше, и реализовать это на основе моей текущей функции повтора, показанной ниже? Любая помощь приветствуется! :)
Моя повторная функция:
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()