我正在使用撤消重做功能创建一个绘图程序。我通过拍摄画布的快照然后将它们保存为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)
答案 0 :(得分:1)
请参阅tempfile模块以创建临时文件和目录。
对于撤消,首先考虑文本编辑器中的撤消/重做。对于每个文本更改,都会有一个反向更改来撤消更改。这些是你保存的,而不是整个文件的快照。对于大块更改,撤消可能比典型的“差异”更紧凑。对于块替换(例如在使用粘贴替换选择时执行),需要保存块开始和旧文本,但只保存新文本的长度。当执行这样的撤销时,可以通过从被恢复的文本缓冲区中检索新文本来将其转换为重做。必须决定是否允许“无限”撤销(直到内存耗尽)或设置固定限制。
对于二维图形,设置((x,y),get(x,y))撤消设置((x,y),颜色)。除此之外,由于像素数量大于字符数量和平面而非线性组织,事情往往更加复杂。但上述原则仍然适用。