如何设置 Python tkinter 画布元素的 z 索引?
Posted
技术标签:
【中文标题】如何设置 Python tkinter 画布元素的 z 索引?【英文标题】:How do I set the z index of an Python tkinter canvas element? 【发布时间】:2020-07-07 09:42:03 【问题描述】:如何在画布初始启动时设置 tkinter 画布元素(圆形、矩形)的 z-index?或者我可以在绘图时直接设置 z-index,例如一个圆圈?不幸的是,我对canvas.tag_lower("tag_name")
无能为力。我认为这个命令会将标签的所有元素向后移动一级 - 是这样吗?
class CanvasGui(tk.Canvas):
def __init__(self, master):
super().__init__(master, bg="#FFF", highlightthickness=0, borderwidth=0)
self.pack(fill="both", expand=True)
self.setCanvasLayers()
def setCanvasLayers(self):
self.tag_lower("highlightGridPoint")
self.tag_lower("grid")
在我看来,带有标签“highlightGridPoint”的元素现在应该在最远的背景中,带有标签“网格”的元素在前景中。但是如果我运行程序,就不是这样了……
【问题讨论】:
你怎么知道这不起作用?您尚未在画布上创建任何项目。 【参考方案1】:在创建标签之前,您无法设置标签的顺序。您的代码升高和降低尚不存在的标记。
您可以通过注意此代码之间的行为差异来了解这一点:
canvas.setCanvasLayers()
canvas.create_rectangle(10,10,50,50, fill="red", tags=("red",))
canvas.create_rectangle(20,20,60,60, fill="green", tags=("green",))
...而这段代码:
canvas.create_rectangle(10,10,50,50, fill="red", tags=("red",))
canvas.create_rectangle(20,20,60,60, fill="green", tags=("green",))
canvas.setCanvasLayers()
【讨论】:
感谢您的回答!我是否能够更改标签的图层而不将其推到背景或前景,只需向上或向下一层?以上是关于如何设置 Python tkinter 画布元素的 z 索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PYTHON 的“tkinter”模块在画布上显示图像,特别适用于 linux?
Python Tkinter:如何让画布每帧更新多边形坐标? [解决了]
删除 tkinter 画布上的所有元素并重新绘制,还是使用 move 更新元素?