绘制程序使用临时文件撤消重做功能?

时间:2014-12-31 22:50:54

标签: file python-3.x temp undo-redo

我正在使用撤消重做功能创建一个绘图程序。我通过拍摄画布的快照然后将它们保存为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 个答案:

答案 0 :(得分:1)

请参阅tempfile模块以创建临时文件和目录。

对于撤消,首先考虑文本编辑器中的撤消/重做。对于每个文本更改,都会有一个反向更改来撤消更改。这些是你保存的,而不是整个文件的快照。对于大块更改,撤消可能比典型的“差异”更紧凑。对于块替换(例如在使用粘贴替换选择时执行),需要保存块开始和旧文本,但只保存新文本的长度。当执行这样的撤销时,可以通过从被恢复的文本缓冲区中检索新文本来将其转换为重做。必须决定是否允许“无限”撤销(直到内存耗尽)或设置固定限制。

对于二维图形,设置((x,y),get(x,y))撤消设置((x,y),颜色)。除此之外,由于像素数量大于字符数量和平面而非线性组织,事情往往更加复杂。但上述原则仍然适用。