如何在画布上更改图像?[python tkinter]
下面是我的问题,我想用tkinter在画布上显示一张图片,当我点击按钮时,应该显示另一张照片。但是我失败了。第一张图片显示得很好,但当我点击按钮时,图片并没有改变。
C = Tkinter.Canvas(top, bg="#fff", height=500, width=600)
// show image1 in canvas first and it works
itk = ImageTk.PhotoImage(img1)
C.create_image(300, 250, image=itk)
C.pack()
def changeImage():
// I want to show image2 in canvas, but I fails
print 'change image in canvas'
itk2 = ImageTk.PhotoImage(img2)
C.create_image(300, 250, image=itk2)
button = Tkinter.Button(top,text='click', command=changeImage)
button.pack()
top.mainloop()
2 个回答
0
itk2在函数结束后就会被销毁(这会导致代码其他地方出现语法错误)。解决这个问题的方法有很多,其中一个就是把它放在函数外面。下面这个是伪代码,因为我没有时间去测试它。
class ImageTest():
def __init__(self):
self.root = tk.Tk()
self.root.title('image test')
self.image1 = ImageTk.PhotoImage(img1)
self.image2 = ImageTk.PhotoImage(img2)
self.displayed=True
self.panel1 = Tkinter.Canvas(top, bg="#fff", height=500, width=600)
self.panel1.create_image(300, 250, image=self.image1)
self.panel1.pack()
tk.Button(self.root, text="Next Pic", command=self.callback,
bg="lightblue").pack()
tk.Button(self.root, text="Exit", command=quit, bg="red").pack()
self.root.mainloop()
def callback(self):
if self.displayed:
self.panel1["image"]=self.image2
else:
self.panel1.config(image=self.image1)
self.displayed=not self.displayed
IT=ImageTest()
2
这个功能可以修改一个或多个选项,适用于所有符合条件的项目。1
myimg = C.create_image(300, 250, image=itk)
def changeImage():
// I want to show image2 in canvas, but I fails
print 'change image in canvas'
itk2 = ImageTk.PhotoImage(img2)
C.itemconfigure(myimg, image=itk2)