gpt4 book ai didi

python - 如何从 kivy 小部件 Canvas 中删除特定说明?

转载 作者:太空狗 更新时间:2023-10-29 21:43:16 25 4
gpt4 key购买 nike

我正在编写一个基于 kivy 的图形应用程序,我可以在其中动态地将节点添加到绘图区域,然后使用有向线(=边)连接它们。可以将节点拖到绘图区域内,边缘应始终与它们保持连接。

Edge类派生自Widget类。它的图形表示由两部分组成,线本身(=线)和线的尖端(=三角形)。绘制边缘小部件时,首先会平移和旋转其 Canvas ,然后将边缘的尖端绘制到 Canvas 上。之后将 Canvas 旋转回原位,将线条部分绘制到canvas.after。

移动节点时,Edge 小部件的 Canvas 会被清除并重新绘制图形表示。然而,这并不像我计划的那样有效。

如果我在 Edge 类的 draw 方法的开头使用 self.canvas.clear() ,旧线不会被删除,我会在 Canvas 上得到多条线。

如果我使用 self.canvas.after.clear(),我会得到一个完全困惑的绘图区域 View ,因为 clear 方法还会从 canvas.after 中删除 PopMatrix 指令。

我怎样才能从 canvas.after 中删除线条的图形表示?有更好的方法吗?

我的 Edge 类的 Kivy 文件:

<Edge>:
id: ed
size_hint: None, None
canvas.before:
Color:
rgb: 0.9, 0.1, 0.1
PushMatrix
Translate:
x: ed.translate_x
y: ed.translate_y
Rotate:
angle: ed.rot_angle
origin: ed.rot_origin_x, ed.rot_origin_y
canvas.after:
PopMatrix

更新我改变了方法,现在我在 Canvas 上绘制所有内容,而不是绘制到 Canvas 和 canvas.after。现在我得到了我想要的结果,但如果有人知道如何删除单独的 Canvas 说明,我会很高兴知道。

最佳答案

您可以:

  1. 通过执行 canvas.remove() 删除 Canvas 的子项并传递所需图形指令的实例。您可以使用 canvas.children 迭代并获得那个。

  2. 为 Canvas 属性分配一个 group 名称,然后使用 canvas.remove_group()。这是分类和删除大量图形指令而不保留对它们的引用的最佳方法。

关于python - 如何从 kivy 小部件 Canvas 中删除特定说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23625507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com