我正在尝试为我的图像编辑程序实现撤销功能。以下是我代码的一部分:
def displayim(root, panel, img, editmenu):
global image, L
L.append(img)
print(len(L))
if (len(L) > 1):
editmenu.entryconfig(0, state=NORMAL)
else:
editmenu.entryconfig(0, state=DISABLED)
image1 = ImageTk.PhotoImage(img)
root.geometry("%dx%d+%d+%d" % (img.size[0], img.size[1], 200, 200))
panel.configure(image = image1)
panel.pack(side='top', fill='both', expand='yes')
panel.image = image1
image = img
def undo(root, panel, editmenu):
global L
i = len(L)
del L[i-1]
last = L.pop
displayim(root, panel, last, editmenu)
我的想法是,当调用任何打开图像或向图像添加效果的函数时,它将通过调用displayim
来显示结果。参数editmenu
确保如果没有要撤消的内容,undo
命令将被禁用。变量L
是一个列表,用于存储调用每个函数后图像的状态。当undo
函数被调用时,它将删除列表中的最后一个项目以及最后一个项目之前的项目(现在变成最后一个项目),并将这个新的最后一个项目传递给displayim
,这样程序可以显示图像的前一个状态,并再次将其添加到列表中。在
但是,当我尝试使用undo
函数时,我得到了一个错误:
我想这个错误意味着我从undo
传递给last
的变量last
不是一个PIL-image对象,所以不能将它添加到PhotoImage
。我现在有什么解决办法吗?如果你有什么建议,请告诉我。在
您应该将
last = L.pop
更改为last = L.pop()
L.pop
返回<build-in method pop of list object>
,而不是PIL image object
相关问题 更多 >
编程相关推荐