cwgt.delete(all) не работает.
Ну, не только эта строка не работает, но и все остальное не работает, поэтому я покажу вам здесь минимальный рабочий пример, основанный на вашем тексте (не на вашем коде), чтобы объяснить вам, как этого добиться.
Метод delete()
выполняет то, что вы хотите сделать. Вы можете передать ему строку all
в качестве аргумента, чтобы удалить все элементы, присутствующие в вашем виджете Tkinter.Canvas
, или указать ссылку на элемент, который вы хотите удалить.
Полная программа
'''
Created on May 2, 2016
@author: Billal Begueradj
'''
import Tkinter as Tk
from PIL import Image, ImageTk
class Begueradj(Tk.Frame):
'''
Dislay an image on Tkinter.Canvas and delete it on button click
'''
def __init__(self, parent):
'''
Inititialize the GUI with a button and a Canvas objects
'''
Tk.Frame.__init__(self, parent)
self.parent=parent
self.initialize_user_interface()
def initialize_user_interface(self):
"""
Draw the GUI
"""
self.parent.title("Billal BEGUERADJ: Image deletion")
self.parent.grid_rowconfigure(0,weight=1)
self.parent.grid_columnconfigure(0,weight=1)
self.parent.config(background="lavender")
# Create a button and append it a callback method to clear the image
self.deleteb = Tk.Button(self.parent, text = 'Delete', command = self.delete_image)
self.deleteb.grid(row = 0, column = 0)
self.canvas = Tk.Canvas(self.parent, width = 265, height = 200)
self.canvas.grid(row = 1, column = 0)
# Read an image from my Desktop
self.image = Image.open("/home/hacker/Desktop/homer.jpg")
self.photo = ImageTk.PhotoImage(self.image)
# Create the image on the Canvas
self.canvas.create_image(132,100, image = self.photo)
def delete_image(self):
'''
Callback method to delete image
'''
self.canvas.delete("all")
# Main method
def main():
root=Tk.Tk()
d=Begueradj(root)
root.mainloop()
# Main program
if __name__=="__main__":
main()
Если у вас есть более одного элемента в виджете Tkinter.Canvas и вы хотите удалить только свое изображение, вы можете указать его идентификатор в методе delete()
, потому что Tkinter.Canvas.create_image()
возвращает id
созданного изображения (хотя это не упоминается в документации, на которую я ссылаюсь).
Это означает, что в приведенном выше коде вы можете запустить:
self.ref_id = self.canvas.create_image(132,100, image = self.photo)
и внутри метода delete_image()
:
self.canvas.delete(self.ref_id)
Демо
Это то, что ты получаешь:
![введите здесь описание изображения](https://i.stack.imgur.com/AAQp7.png)
После нажатия на кнопку изображение будет очищено:
![введите здесь описание изображения](https://i.stack.imgur.com/xetiz.png)
person
Billal Begueradj
schedule
02.05.2016
update
на своем объекте холста. - person VRage   schedule 02.05.2016