Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 特金特公司;PIL:删除图像_Python_Tkinter_Python Imaging Library - Fatal编程技术网

Python 特金特公司;PIL:删除图像

Python 特金特公司;PIL:删除图像,python,tkinter,python-imaging-library,Python,Tkinter,Python Imaging Library,我正在尝试编写一个简单的应用程序,在按下按钮后显示随机电影的海报。 问题:我不知道如何在显示下一个图像之前删除一个图像(因此它们不会相互堆叠,如下图所示:) 我的缩写代码: from tkinter import * from tkinter import ttk import random from PIL import ImageTk, Image mlist = ['resized.jpg', 'cat.jpg'] class App(Frame): def __init__(

我正在尝试编写一个简单的应用程序,在按下按钮后显示随机电影的海报。 问题:我不知道如何在显示下一个图像之前删除一个图像(因此它们不会相互堆叠,如下图所示:)

我的缩写代码:

from tkinter import *
from tkinter import ttk
import random
from PIL import ImageTk, Image


mlist = ['resized.jpg', 'cat.jpg']
class App(Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master, padding='5')
        self.grid(column=0, row=0, sticky=(N, W, E, S))
        self.create_button()
        self.name = ttk.Label()
        self.image = ttk.Label()

    def create_button(self):
        self.button = ttk.Button(self,
                             text="Press me",
                             width=12,
                             command=lambda: self.display()
                             ).grid(column=0, row=2, columnspan=2, pady=10,  sticky=N)

    def display(self):
        self.name.destroy()
        k = random.randrange(0, 2)
        self.name = ttk.Label(self, font=(None, 16), text=mlist[k])
        self.image = Image.open(mlist[k])
        poster = ImageTk.PhotoImage(self.image)
        display = ttk.Label(self, image=poster)
        display.my_image = poster

        display.grid(row=2, column=3, rowspan=3)
        self.name.grid(row=0, rowspan=2, column=3)


root = Tk()
root.title("Test")
root.geometry("550x575")
app = App(root)
root.mainloop()

我认为,我应该在“self.image”上应用类似于“self.name.destroy()”的内容。但是没有这样的方法。。。那么如何解决呢

通过使用
canvas
小部件,您可以更好地控制图像。它包括一个删除显示的图像的方法。当我尝试时,您的代码似乎工作正常。最初没有图像,按下按钮后显示
resized.jpg
,然后按下另一个按钮后显示
cat.jpg
。我在代码中看到的一个显然不相关的潜在问题是,将调用
ttk.Button.grid()
方法的结果分配给
self.Button
grid()
方法返回
None
。使用
canvas
小部件可以更好地控制图像。它包括一个删除显示的图像的方法。当我尝试时,您的代码似乎工作正常。最初没有图像,按下按钮后显示
resized.jpg
,然后按下另一个按钮后显示
cat.jpg
。我在代码中看到的一个显然不相关的潜在问题是,将调用
ttk.Button.grid()
方法的结果分配给
self.Button
grid()
方法返回
None