es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo llevar un Canvas al frente?

Superpuse 5 objetos Tk.Canvas y cada uno tendrá imágenes diferentes. Quiero llevar cada lienzo al frente de todos los demás lienzos para dibujar imágenes en el lienzo más frontal.

class window_tk():
    def __init__(self, main):
        self.main = main
        self.canvas_org = tk.Canvas(self.main, bg='white')
        self.canvas_layer1 = tk.Canvas(self.main, bg='red')
        self.canvas_layer2 = tk.Canvas(self.main, bg='green')
        self.canvas_layer3 = tk.Canvas(self.main, bg='blue')
        self.canvas_layer4 = tk.Canvas(self.main, bg='black')
        self.btn_load = tk.Button(self.main, text="Cargar imagen", command=self.load_ct)
        self.btn_layer1 = tk.Button(self.main, text="Dibujar en L1", command=self.bring_1)
        self.btn_layer2 = tk.Button(self.main, text="Dibujar en L2", command=self.bring_2)
        self.btn_layer3 = tk.Button(self.main, text="Dibujar en L3", command=self.bring_3)
        self.btn_layer4 = tk.Button(self.main, text="Dibujar en L4", command=self.bring_4)

    def bring_1(self):
        self.canvas_layer1.place(x=50, y=0)

    def bring_2(self):
        self.canvas_layer2.place(x=50, y=0)

    def bring_3(self):
        self.canvas_layer3.place(x=50, y=0)

    def bring_4(self):
        self.canvas_layer4.place(x=50, y=0)

Pensé que la función canvas.place() llevará el lienzo al frente pero no lo hizo. ¿Qué función puedo usar? ¿O debo desempaquetar todos los demás lienzos?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para llevar un canvas al frente de todos los demás canvas, puedes usar el método lift(). Este método moverá el canvas y todo su contenido hacia la parte superior del orden de apilamiento.

    Por ejemplo, si quieres llevar canvas_layer1 al frente, puedes modificar el método bring_1() de la siguiente manera:

    def bring_1(self):
        self.canvas_layer1.lift()
    

    Esto llevará canvas_layer1 al frente de todos los demás canvas, sin necesidad de desempaquetar o modificar los otros canvases.

    Alternativamente, también puedes usar el método lower() para mover un canvas hacia el fondo del orden de apilamiento.

    def send_to_back(self):
        self.canvas_layer1.lower()
    

    Estos métodos están disponibles tanto para objetos Tk.Canvas como para objetos ttk.Canvas.

Comments are closed.