繁体   English   中英

如何在 tkinter 中刷新图像

[英]How to refresh a image in tkinter

我是 Tkinter 的新手,我正在开发一个用户可以编辑的噪声地形生成器。 但是,当我按下按钮时,我在 canvas 上的图片没有更新时遇到问题。 我的 tkinter 有两个按钮:生成(生成按钮并将其显示在画布上)和刷新(清除画布上的图像)。 问题是,如果我生成另一个与图片同名文件的图像并将其显示到 canvas ( 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是我生成按钮并将其显示在我的 canvas 时的默认图像

纽扣:

            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")

如果您想更详细地描述我的代码,请点击此处

尝试:

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

参考这个链接

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM