gpt4 book ai didi

kivy - 为什么在 Kivy 中小部件似乎共享相同的 Canvas ?

转载 作者:行者123 更新时间:2023-12-01 04:39:13 33 4
gpt4 key购买 nike

Kivy 文档指定 "each widget in Kivy already have by default their Canvas" .然而,在实践中,小部件似乎持有对整个窗口的共享 Canvas 的引用,而不是只为自己拥有一个。

当我使用 context_instrucions 时,这一点变得更加清晰。的 Rotate , TranslateScale .如果我 Rotate在特定的 Widget 内,它会影响后续的小部件。一切似乎都在轮回。我必须取消- Rotate在绘制其他任何东西之前先在 Canvas 上。此外,它是在旋转的 Canvas 中还是在下一个 Canvas 中并不重要。指令 Color 也会发生同样的情况.

强加和异常(exception)这种默认行为的唯一方法似乎是 RelativeLayout .在那种情况下,我刚才说的所有内容都与RelativeLayout有关。除了 Color继续是全局性的。可以争辩说颜色不是定位指令和 RelativeLayout只是相对于位置。 RotateTranslate是位置说明,但它是 Scale ?

我其实刚做完一个 blog post用一个具体的例子

我显然缺少一些东西,因为每个 Widget 的部分都有自己的 canvas .所以,基本上我的问题是为什么小部件似乎在 Kivy 中共享相同的 Canvas ?

最佳答案

我让自己犯了一个大错误。这一切都始于名称 canvas令人困惑。我开始认为 Canvas 是我们可以画画的空间。但不是,这里的文档实际上非常清楚:

Use this class to add graphics or context instructions that you want to be used for drawing Kivy API - Canvas Class)



和这里:

The canvas is a graphics object that contains all the drawing instructions for the graphical representation of the widget (Kivy API - Canvas Property).



因此, Canvas 是一组指令(如果我们考虑 canvas.beforecanvas.after,则是一组指令)。 指令不绘制或在 canvas 上执行, 说明只是添加到 canvas .指令在 中执行坐标空间 .例如,当 Canvas 中有 Rotate 指令时,它将应用于任何 VertexInstruction (例如 Line)在显示在 之前坐标空间 .

因此,小部件不共享 canvas但是我们添加到 canvas 的说明分享同一个 坐标空间 .

关于kivy - 为什么在 Kivy 中小部件似乎共享相同的 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16983675/

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