我怎样才能把 Canvas 放在前面?
How can I bring a Canvas to front?
我重叠了 5 个 Tk.Canvas 个对象,每个对象都有不同的图像。我想把每个 canvas 放在每个其他 canvas 的前面,以便在最前面画图 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 放在前面,但事实并非如此。我可以使用哪个功能?或者我应该解压缩所有其他 canvases 吗?
您可以使用以下功能-
canvas.tag_raise(canvas_layer4) -> For bringing to front
canvas.tag_lower(canvas_layer4) -> For pushing back
请看acw1668给出的答案。 lift
函数不适用于 Canvas 对象。他的回答是正确的。
所有 tkinter 对象,Canvas 包括在内,支持以下方法:
w.lift(以上=None)
如果参数是 None,包含 w 的 window 被移动到 window 堆叠顺序的顶部。要将 window 移动到某个顶层 window w 的上方,请将 w 作为参数传递。
这使您可以完全控制哪个小部件位于顶部。
https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/universal.html
现在我重新阅读,我发现它的语言有点不正确。 “w”是任何 tkinter 小部件,“above_this”是另一个 tkinter 小部件。该函数在堆叠顺序中将“w”置于“above_this”之上。
由于Canvas
已经覆盖了.tkraise()
功能,需要直接调用TCL命令:
self.canvas.tk.call('raise', self.canvas._w)
我重叠了 5 个 Tk.Canvas 个对象,每个对象都有不同的图像。我想把每个 canvas 放在每个其他 canvas 的前面,以便在最前面画图 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 放在前面,但事实并非如此。我可以使用哪个功能?或者我应该解压缩所有其他 canvases 吗?
您可以使用以下功能-
canvas.tag_raise(canvas_layer4) -> For bringing to front
canvas.tag_lower(canvas_layer4) -> For pushing back
请看acw1668给出的答案。 lift
函数不适用于 Canvas 对象。他的回答是正确的。
所有 tkinter 对象,Canvas 包括在内,支持以下方法:
w.lift(以上=None) 如果参数是 None,包含 w 的 window 被移动到 window 堆叠顺序的顶部。要将 window 移动到某个顶层 window w 的上方,请将 w 作为参数传递。
这使您可以完全控制哪个小部件位于顶部。
https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/universal.html
现在我重新阅读,我发现它的语言有点不正确。 “w”是任何 tkinter 小部件,“above_this”是另一个 tkinter 小部件。该函数在堆叠顺序中将“w”置于“above_this”之上。
由于Canvas
已经覆盖了.tkraise()
功能,需要直接调用TCL命令:
self.canvas.tk.call('raise', self.canvas._w)