如何在tkinter中刷新图像



我是Tkinter的新手,正在开发一个用户可以编辑的噪声地形生成器。然而,当我按下按钮时,画布上的图片没有更新,我遇到了问题。我的tkinter有两个按钮:Generate(生成按钮并将其显示在画布上(和Refresh(清除画布上的图像(。问题是,如果我生成另一个与图片同名的图像文件,并将其显示在画布上(generate(,它就不会出现。克服这些问题的最佳方法是什么?

这是我的代码:

self.Preview_Image = tk.Canvas(top, height=600, width=600)
self.Preview_Image.pack()
self.image = (Image.open("No_image.jpeg"))
self.resize_image = self.image.resize((600, 450), Image.ANTIALIAS)
self.img = ImageTk.PhotoImage(self.resize_image)
self.update_img = ImageTk.PhotoImage(Image.open("result_veg.jpeg"))
self.image_id = self.Preview_Image.create_image(-115, -50, image=self.img, anchor=tk.NW, )
self.Preview_Image.place(relx=0.017, rely=0.067, relheight=0.784
, relwidth=0.605)

self.image是我打开应用程序时的默认图像,而self.update_img则是我生成按钮并将其显示在画布上时的图像

按钮:

self.Generate_button = tk.Button(top, command=self.combineFunc(get_result,lambda:update_image(self)))
self.Generate_button.place(relx=0.667, rely=0.867, height=24, width=77)
self.Generate_button.configure(activebackground="#ececec",
activeforeground="#000000",
background="#d9d9d9",
disabledforeground="#a3a3a3",
foreground="#000000",
highlightbackground="#d9d9d9",
highlightcolor="black",
pady="0",
text='''Generate''',)
self.Refresh_button = tk.Button(top, command=lambda:refresh(self))
self.Refresh_button.place(relx=0.85, rely=0.867, height=24, width=67)
self.Refresh_button.configure(activebackground="#ececec",
activeforeground="#000000",
background="#d9d9d9",
disabledforeground="#a3a3a3",
foreground="#000000",
highlightbackground="#d9d9d9",
highlightcolor="black",
pady="0",
text='''Refresh''',)

我的按钮命令:

def update_image(self, *args , **kwargs): 
self.Preview_Image.itemconfig(self.image_id, image = self.update_img)
def refresh(self, *args, **kwargs):
self.Preview_Image.delete(self.image_id)
print("refresh")

如果你想更详细地描述我的代码,这里

更新get_call()内的图像文件result_veg.jpeg后,需要重新加载并分配给self.update_img:

def update_image(self, *args, **kwargs):
# reload the updated result_veg.jpeg
self.update_img = ImageTk.PhotoImage(file='result_veg.jpeg')
self.Preview_Image.itemconfig(self.image_id, image=self.update_img)

尝试:

def update_image(self, *args , **kwargs): 
self.Preview_Image.itemconfig(self.image_id, image = self.update_img)
self.Preview_Image.image = self.update_img

请参阅此链接

最新更新