我正在编写一个基于kivy的图形应用程序,我可以动态地将节点添加到绘图区域,然后使用有向线(=边缘)连接它们.节点可以在绘图区域内拖动,边缘应始终与它们保持连接.
Edge类派生自Widget类.它的图形表示由两部分组成,即线本身(=线)和线尖(=三角形).绘制"边"窗口小部件时,首先会对其画布进行平移和旋转,然后将边缘的尖端绘制到画布上.之后,画布旋转回原始位置,线条部分被绘制到canvas.after.
移动节点时,将清除Edge小部件的画布,并再次绘制图形演示.但是,这不符合我的计划.
如果我在Edge类的draw方法的开头使用self.canvas.clear(),则不会删除旧行,并且我在画布上获得多行.
如果我使用self.canvas.after.clear(),我会得到一个完全混乱的绘制区域视图,因为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
Run Code Online (Sandbox Code Playgroud)
更新 我改变了我的方法,现在我在画布上绘制所有内容,而不是绘制到画布和canvas.after.现在我得到了我想要的结果,但是如果有人知道如何删除单个画布说明,那么知道它会很好.
你可以:
通过执行canvas.remove()并传递所需图形指令的实例来删除画布的子项.你可以迭代并获得一个canvas.children.
group为canvas属性指定一个名称,然后使用canvas.remove_group().这是分类和删除大量图形指令而不保留对它们的引用的最佳方法.
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |