如何将画布项目提升到画布窗口项目之上



有一个将画布窗口提升到其他画布窗口之上的解决方案:如何更改画布中窗口项的堆叠顺序?但我无法将非画布窗口项(例如画布矩形(提升到画布窗口项之上。我该怎么做?

下面是一个示例代码,我试图将矩形提升到画布窗口上方(该示例是从上面的链接复制的,并由画布矩形扩展(:


root = tk.Tk()
canvas = tk.Canvas(root, bg="bisque")
canvas.pack(fill="both", expand=True)
def focus_win(event):
event.widget.lift()
for n, color in enumerate(("black", "red", "orange", "green", "blue", "white")):
win = tk.Frame(canvas, background=color, width=100, height=100)
x = 50 + n*20
y = 50 + n*20
canvas.create_window(x, y, window=win)
win.bind("<1>", focus_win)
rec = canvas.create_rectangle(x, y, x+100, y+100)
canvas.tag_raise(rec, "all")

root.mainloop()

但我无法引发非画布窗口项(例如画布矩形(。我该怎么做?

您不能。文件上写着:

画布中的项目是为了显示而排序的显示列表中的第一个项目首先显示,然后是列表中的下一个项目,依此类推。显示列表中稍后的项目模糊显示列表中较早的,有时被称为早期项目的"顶部"。当新项目创建后,它被放置在显示列表的末尾,位于其他一切。小工具命令可用于重新排列订单显示列表的。

窗口项是上述规则的例外。基础窗口系统要求它们始终绘制在其他项目之上此外,窗口项目的堆叠顺序不受任何画布小部件命令的;您必须使用Tk-raise命令,并且降低命令。

或者可以吗

我的意思是,您总是可以将多个画布作为窗口项,并在这些画布中绘制您想要的内容。

最新更新