【发布时间】:2022-01-14 22:43:52
【问题描述】:
我重叠了 5 个 Tk.Canvas 对象,每个对象都有不同的图像。我想将每个画布放在所有其他画布的前面,以便在最前面的画布中绘制图片。
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 = "Load Image",command = self.load_ct)
self.btn_layer1 = tk.Button(self.main,text = "Draw in L1",command = self.bring_1)
self.btn_layer2 = tk.Button(self.main,text = "Draw in L2",command = self.bring_2)
self.btn_layer3 = tk.Button(self.main,text = "Draw in L3",command = self.bring_3)
self.btn_layer4 = tk.Button(self.main,text = "Draw in L4",command = self.bring_4)
def bring_1(self):
self.canvas_layer1.place(x=50,y=00)
def bring_2(self):
self.canvas_layer2.place(x=50, y=00)
def bring_3(self):
self.canvas_layer3.place(x=50, y=00)
def bring_4(self):
self.canvas_layer4.place(x=50, y=00)
我认为 canvas.place() 函数会将画布放在前面,但事实并非如此。我可以使用哪个功能?还是我应该打开所有其他画布的包装?
【问题讨论】:
-
由于
Canvas已经覆盖了.tkraise()函数,所以需要直接调用TCL命令:self.canvas.tk.call('raise', self.canvas._w)。 -
@acw1668 你是我的救星谢谢