相关疑难解决方法(0)

如何根据Widget Kivy属性更新动态添加的**Ellipse(不使用Builder)的颜色?

这与另一个问题非常相关.唯一的区别是我是动态添加Ellipse with self.canvas而不是使用Builder(Builder.load_stringBuilder.load_file).因此,这里的代码,做工作.当您单击椭圆时,它会移动并更改颜色:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty
from kivy.graphics import Color, Ellipse

Builder.load_string("""
<CircleWidget>:
    canvas:
        Color:
            rgba: self.r,1,1,1
        Ellipse:
            pos: self.pos
            size: self.size
""")

class CircleWidget(Widget):
    r = NumericProperty(0)
    def __init__(s, **kwargs):
        s.size= [50,50]
        s.pos = [100,50]
        super(CircleWidget, s).__init__(**kwargs)

    def on_touch_down(s, touch):
        if s.collide_point(touch.x,touch.y):    
            s.pos = [s.pos[1],s.pos[0]]     # this works
            s.r = 1.0                       # this also works

class TestApp(App): …
Run Code Online (Sandbox Code Playgroud)

kivy

9
推荐指数
1
解决办法
2910
查看次数

为什么小部件在Kivy中共享相同的画布?

Kivy文档指出"Kivy中的每个小部件默认都有他们的Canvas".然而,在实践中,小部件似乎持有对整个窗口的共享画布的引用,而不是仅为自己创建一个.

这变得更加清晰,当我使用context_instrucionsRotate,TranslateScale.如果我Rotate在特定内部Widget,它将影响后续小部件.一切似乎都在旋转.Rotate在绘制任何其他内容之前,我必须取消画布.而且,如果它在旋转的画布中或下一个画布中并不重要.指令也是如此Color.

对此默认行为施加和例外的唯一方法似乎是RelativeLayout.在那种情况下,我所说的所有内容RelativeLayoutColor与继续全球化的外部相关.可以说Color不是定位指令而RelativeLayout只是相对于位置.Rotate并且Translate是位置说明但是它Scale

我实际上只是通过一个具体的例子完成了一篇博文

我显然错过了每个Widget的部分都有自己的东西canvas.所以,基本上我的问题是为什么小部件似乎在Kivy中共享相同的画布?

kivy

3
推荐指数
1
解决办法
1859
查看次数

标签 统计

kivy ×2