¿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?
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étodobring_1()
de la siguiente manera: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.Estos métodos están disponibles tanto para objetos
Tk.Canvas
como para objetosttk.Canvas
.