Программа рисования отменить повторить функцию с использованием временных файлов?

Я создаю программу рисования с функцией отмены повторения. Я реализую это, делая снимки холста, а затем сохраняя их в виде файлов 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). Кроме того, вещи, как правило, более сложны из-за гораздо большего количества пикселей, чем символов, и их планарной, а не линейной организации. Но вышеприведенные принципы все еще применяются.

Другие вопросы по тегам