Python、Tkinter:如何使用 ID 或标签获取所有画布对象的句柄?

ven*_*nti 4 python tkinter tkinter-canvas

我想获取画布上所有矩形的句柄,并带有特定标签,以将它们放置在网格几何管理器中(用户可以通过鼠标拖动来移动它们,然后我想为他“重新排序”它们)。我没有矩形的手柄,但它们都有相同的标签(“moveable_canvas”)。从那里我可以转换为项目 id (.find_withtag) 但现在怎么办?我可以将 ID 设置为 .itemconfigure 等,但如何对它们进行“网格化”?

moveable_canvases = self.canv.find_withtag("moveable_canvas")
for canvas_id in moveable_canvases:
    ???.grid(...)
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 7

查找对象 ID

您可以使用画布的各种 find* 方法来查找所有对象。例如,要获取所有对象 ID 的列表,您可以执行以下操作:

self.canv.find_all()
Run Code Online (Sandbox Code Playgroud)

要查找具有给定标签的所有内容,您可以使用find_withtag而不是find_all

self.canv.find_withtag("moveable_canvas")
Run Code Online (Sandbox Code Playgroud)

将它们排列在网格中

您说目标是获取这些对象 id,以便您可以使用grid. 你不能这样做。grid仅适用于小部件,不适用于画布对象。没有解决方法。没有办法将其中一种转换为另一种。

如果您想将项目排列在网格中,那么您必须自己进行数学计算,并使用coordsmovecanvas 方法来对齐对象。