Программа рисования отменить повторить функцию с использованием временных файлов?
Я создаю программу рисования с функцией отмены повторения. Я реализую это, делая снимки холста, а затем сохраняя их в виде файлов JPEG. Затем я добавляю имя файла в список для последующего извлечения. Как я могу сделать эти файлы JPEG временными? Какой модуль я должен использовать? Я использую Python 3.2.5. Спасибо за помощь!
Вот часть моего кода
if mb[0]==0 and count==1: #if a drawing was made
count1+=1 #my filename assigner
fileName=str(count1)+".jpg" #creates fileName
image.save(screen.subsurface(touch),fileName)#saves image
nowlist.append(fileName) #adds to nowlist
count=0 #resets counter
if len(nowlist)>1: #removes old data
undolist.append(nowlist[0]) #adds it to undolist
del(nowlist[0]) #dels it
print("nowlist :",nowlist) #prints lists
print("undolist :",undolist)
if undoRect.collidepoint((mx,my)) and mb[0]==1: #if mouse is over and clicks undo
if len(undolist)>0: #if there are at least 1 item
fileName=undolist[-1] #last item of undolist
canvas1=image.load(fileName) #fetch file image
canvas2=screen.blit(canvas1,[150,150]) #blit it onto the canvas
nowlist.append(fileName) #adds it to the canvas list
if len(nowlist)>1: #ensures there is only 1 item on the canvas
redolist.append(nowlist[0])
del(nowlist[0])
del(undolist[-1])
print("nowlist :",nowlist)
print("undolist :",undolist) #prints undolist
print("redolist :",redolist) #prints redolist
if redoRect.collidepoint((mx,my)) and mb[0]==1: #if mouse is over and clicks redo
if len(redolist)>0: #if there is at least 1 item
fileName=redolist[-1] #take last term
canvas1=image.load(fileName) #fetch file of that name
canvas2=screen.blit(canvas1,[150,150]) #blit it onto the canvas
nowlist.append(fileName) #append it to the nowlist,
if len(nowlist)>1: #removes what was on the canvas
undolist.append(nowlist[0]) #adds it to the undo list
del(nowlist[0]) #del from nowlist
del(redolist[-1])
print("nowlist :",nowlist) #prints the lists
print("undolist :",undolist)
print("redolist :",redolist)
1 ответ
Смотрите модуль tempfile для создания временных файлов и каталогов.
Что касается отмены, начните с размышлений об отмене / повторении в текстовом редакторе. Для каждого изменения текста есть обратное изменение, которое отменяет изменение. Это то, что вы сохраняете, а не снимок всего файла. Для больших замен блоков отмена может быть более компактной, чем типичный 'diff'. Для замены блока (например, выполняемой при замене выделения вставкой) необходимо сохранить начало блока и старый текст, но только длину нового текста. Когда такая отмена выполняется, ее можно превратить в повтор, извлекая новый текст из текстового буфера, который возвращается. Нужно решить, разрешить ли "бесконечное" отменение (пока не закончится память) или установить фиксированный лимит.
Для двумерной графики set((x,y), get(x,y)) отменяет set((x,y), color). Кроме того, вещи, как правило, более сложны из-за гораздо большего количества пикселей, чем символов, и их планарной, а не линейной организации. Но вышеприведенные принципы все еще применяются.