代码之家  ›  专栏  ›  技术社区  ›  user124784

Kivy:实时更新小部件的颜色

  •  0
  • user124784  · 技术社区  · 10 年前

    我发现了一个类似的问题:

    How do I change the color of my widget in Kivy at run time?

    我正在使用类似的方法来尝试在拖动和移动小部件时更改它们的颜色。


    class GraphNode(Widget):
        r = NumericProperty(1.0)
    
    def __init__(self, **kwargs):
        self.size= [50,50]
        self.pos = [175,125]
        super(GraphNode, self).__init__(**kwargs)
    
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            if touch.grab_current == None:
                self.r = 0.6
                touch.grab(self)             
                return True                
        return super(GraphNode, self).on_touch_down(touch)
    
    
    
    def on_touch_move(self, touch):
        if touch.grab_current is self:
            self.pos=[touch.x-25,touch.y-25]
        # now we only handle moves which we have grabbed
    
    
    def on_touch_up(self, touch):
        if touch.grab_current is self:
            touch.ungrab(self)
            self.r = 1.0
            # and finish up here
    
    
    def onTouchMove(self, touch):
        if self.collide_point(touch.x, touch.y):
            self.pos=[touch.x-25, touch.y-25]
    pass
    

    我正在尝试使用以下(kv)文件更新数字属性以更改颜色:

    #:kivy 1.0.9
    
    <GraphInterface>:
        node: graph_node
    
        GraphNode:
            id: graph_node
            center: self.parent.center
    
    <GraphApp>:
        canvas:
    
    <GraphNode>:
        size: 50, 50
        canvas:
            Ellipse:
                pos: self.pos
                size: self.size
            Color:
                rgba: (root.r,1,1,1)
    
    <GraphEdge>:
        size: 10, 10
        canvas:
    

    然而,当我抓住它们时,颜色不会改变。如果我不在on_ch_drop()方法中更改颜色,那么我可以用新颜色生成节点。知道如何解决这个问题吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   inclement    10 年前

    看起来您的代码可能工作得很好,但Color指令在其他所有指令之后,因此不会影响任何内容。你是想把它放在椭圆之前吗?