How do I clean my Canvas in python after showing an image and being able to show a new one?

-1

Hi, I would like to know how I can clean my canvas after having shown an image, place a name function to erase to be able to clean the image that was shown and to be able to select a new one and it will be displayed on the canvas. If someone can help me, I'll thank them, I leave my code.

from tkinter import *
from tkinter import Tk    
from tkinter import PhotoImage
from tkinter import Canvas
from tkinter import NW
from tkinter import Menu
from tkinter import filedialog
from PIL import Image, ImageTk
from sys import argv
import tkinter as tk


ventana = tk.Tk ()
ventana.geometry("900x900+0+0")
ventana.title("")
fondo=PhotoImage(file="p1.gif")
lblFondo=Label(ventana,image=fondo).place(x=0,y=0) #fondo 


##########


img_frame = tk.Frame(ventana, height=600, width=800, bg='#faf0e6')
img_frame.pack()
canvas = tk.Canvas (img_frame, height=600, width=800, bg='#faf0e6', relief=tk.SUNKEN)

sbarV = tk.Scrollbar(img_frame, orient=tk.VERTICAL, command=canvas.yview)
sbarH = tk.Scrollbar(img_frame, orient=tk.HORIZONTAL, command=canvas.xview)
sbarV.pack(side=tk.RIGHT, fill=tk.Y)
sbarH.pack(side=tk.BOTTOM, fill=tk.X)

canvas.config(yscrollcommand=sbarV.set)
canvas.config(xscrollcommand=sbarH.set)
canvas.pack(side=tk.LEFT, expand=True, fill=tk.BOTH)

###########



# Variable global q
imagenL = None
ruta = "";


def abrir():
    global imagenL
    global ruta


    ventana.filename=filedialog.askopenfilename(initialdir="C:/Users///")
    ruta=ventana.filename
    imagen = Image.open(ruta)
    imagenL = ImageTk.PhotoImage(imagen)
    canvas.create_image(100,100,anchor="center",image=imagenL) 



##AQUI DEFINO UNA FUNCIÓN PARA BORRAR O LIMPIAR MI CANVAS DESPUES DE HABER MOSTRADO UNA IMAGEN

def borrar():
    imagenL.clearRect(0, 0, canvas.width, canvas.height); 


#________MENÚ información de ayuda 
class Ayuda_Dialog:
    def __init__(self, parent):
        text = ("Bienvenido al menú de ayuda\n\n")

        self.top = tk.Toplevel(parent)
        self.top.title("Ayuda")
        display = tk.Text(self.top)
        display.pack()
        display.insert(tk.INSERT, text)
        display.config(state=tk.DISABLED)
        b = tk.Button(self.top, text="Cerrar", command=self.cerrar)
        b.pack(pady=5)
        b.config(bg="CadetBlue")## bg es el boton de cerrar ,aqui se puede cambiar

    def cerrar(self):
        self.top.destroy()

class Main_Window:
    def __init__(self,  ventana):
        mnuAyuda.add_command(label="Ayuda",command=self.ayuda)
    def ayuda(self):
        Ayuda_Dialog(ventana)


barraMenu=Menu(ventana)
#crear los menús .............................................................. 
mnuArchivo=Menu(barraMenu)
mnuBorrar=Menu(barraMenu)
mnuAyuda=Menu(barraMenu)


#crear los comandos de los menús..........
mnuArchivo.add_command(label="Abrir",command = abrir)
#mnuArchivo.add_command(label="Guardar",command = guardar)
#mnuArchivo.add_command(label="Guardar como",command = guardar)
mnuArchivo.add_separator()
mnuArchivo.add_command(label="Salir",command=ventana.destroy)
mnuBorrar.add_command(label="Limpiar", command = borrar)

............................................... .................

barraMenu.add_cascade(label="Archivo",menu=mnuArchivo)
barraMenu.add_cascade(label="Ayuda",menu=mnuAyuda)
barraMenu.add_cascade(label="Limpiar",menu=mnuBorrar)

ventana.config(menu=barraMenu)

if __name__ == "__main__":            
    Main_Window(ventana)
ventana.mainloop()
    
asked by Airam 08.11.2018 в 02:03
source

1 answer

0
"""
Cambié un poco el código, porque no conseguía hacerlo funcionar en un comienzo.
Lo importante es la línea 55: lienzo.delete("all")
"""
from tkinter import Tk, PhotoImage, Canvas, NW, Menu, filedialog, Label, Scrollbar, Frame, Toplevel, Text, Button
from tkinter import SUNKEN, VERTICAL, HORIZONTAL, LEFT, RIGHT, BOTH, BOTTOM, Y, X, INSERT, DISABLED
from PIL import Image, ImageTk
from sys import argv

ventana = Tk()
ventana.geometry("300x300+0+0")
ventana.title("")
#fondo=PhotoImage(file="p1.gif")
#lblFondo=Label(ventana,image=fondo).place(x=0,y=0)


##########
img_frame = Frame(ventana, height=200, width=200, bg='#faf0e6')
img_frame.pack()
lienzo = Canvas(img_frame, height=100, width=100, bg='#faf0e6', relief=SUNKEN)

sbarV = Scrollbar(img_frame, orient=VERTICAL, command=lienzo.yview)
sbarH = Scrollbar(img_frame, orient=HORIZONTAL, command=lienzo.xview)
sbarV.pack(side=RIGHT, fill=Y)
sbarH.pack(side=BOTTOM, fill=X)

lienzo.config(yscrollcommand=sbarV.set)
lienzo.config(xscrollcommand=sbarH.set)
lienzo.pack(side=LEFT, expand=True, fill=BOTH)
###########


# Variable global q
imagenL = None
ruta = "";


def abrir():
    global imagenL
    global ruta
    global lienzo

    ventana.filename=filedialog.askopenfilename(initialdir="C:/Users///")
    ruta=ventana.filename
    imagen = Image.open(ruta)
    imagenL = ImageTk.PhotoImage(imagen)
    lienzo.create_image(100,100,anchor="center",image=imagenL) 


##AQUI DEFINO UNA FUNCIÓN PARA BORRAR O LIMPIAR MI CANVAS DESPUES DE HABER MOSTRADO UNA IMAGEN

def borrar():
    global lienzo
    lienzo.delete("all")


#________MENÚ información de ayuda 
class Ayuda_Dialog:
    def __init__(self, parent):
        text = ("Bienvenido al menú de ayuda\n\n")

        self.top = Toplevel(parent)
        self.top.title("Ayuda")
        display = Text(self.top)
        display.pack()
        display.insert(INSERT, text)
        display.config(state=DISABLED)
        b = Button(self.top, text="Cerrar", command=self.cerrar)
        b.pack(pady=5)
        b.config(bg="CadetBlue")## bg es el boton de cerrar ,aqui se puede cambiar

    def cerrar(self):
        self.top.destroy()

class Main_Window:
    def __init__(self,  ventana):
        mnuAyuda.add_command(label="Ayuda",command=self.ayuda)
    def ayuda(self):
        Ayuda_Dialog(ventana)


barraMenu=Menu(ventana)
# crear los menús
mnuArchivo=Menu(barraMenu)
mnuBorrar=Menu(barraMenu)
mnuAyuda=Menu(barraMenu)


# crear los comandos de los menús
mnuArchivo.add_command(label="Abrir",command = abrir)
mnuArchivo.add_separator()
mnuArchivo.add_command(label="Salir",command=ventana.destroy)
mnuBorrar.add_command(label="Limpiar", command = borrar)

barraMenu.add_cascade(label="Archivo", menu=mnuArchivo)
barraMenu.add_cascade(label="Borrar", menu=mnuBorrar)

ventana.config(menu=barraMenu)
    
answered by 09.11.2018 в 14:56