2016-03-26 2 views
1

私はキャンバスにidを割り当てようとしたときにエラーInvalid data after declarationが出ますが、それより下のIDを参照する他の方法はありません(たとえばe1)。私のPythonコードでe1をどのように参照するのですか?Kivyのキャンバス内の子供のIDをどのように参照しますか?

<MyClockWidget>: 
    face: face 
    ticks: ticks 
    el1: el1 
    FloatLayout: 
     id: face 
     size_hint: None, None 
     pos_hint: {"center_x":0.5, "center_y":0.5} 
     size: 0.9*min(root.size), 0.9*min(root.size) 
     canvas: 
      id: cand 
      Color: 
       rgb: 0.5, 0.5, 0.5 
      Ellipse: 
       size: self.size  
       pos: self.pos 
     canvas: 
      Color: 
       rgb: 0.1, 0.1, 0.1 
      Ellipse: 
       id: el1 
       size: self.size  
       pos: self.pos 
       angle_start: 0 
       angle_end: 90 
      Ellipse: 
       id: el2 
       size: self.size  
       pos: self.pos 
       angle_start: 110 
       angle_end: 130 
+1

は、[この質問](http://stackoverflow.com/questions/23625507/how-can-i-removeを見てください特定の命令からKivyウィジェットのキャンバスまで)、特定の命令にアクセス(および削除)する方法を説明しています。命令のプロパティを変更する場合は、それらをルートノードのプロパティにバインドします( '<...>:e1_start:0' ... 'Ellipse:angle_start:root.e1_start')。 – zeeMonkeez

+0

@zeeMonkeezあなたは私を大いに助けてくれました。私は昨晩のこの深夜の夜に壁に頭をぶつけていました。あなたが答えとしてこれを提出すれば、私は喜んで受け入れるよ、ありがとう! – howMuchCheeseIsTooMuchCheese

答えて

2

私はここKVでinstruction groupsの使用はLANGが十分に立証されてと思いますが、しませんが、後でアクセスCanvas要素にそれらを使用する方法の例です。また、この例ではCanvas命令の側面を制御するためのプロパティを使用する方法を示しています。

from kivy.app import App 
from kivy.uix.slider import Slider 
from kivy.lang import Builder 
from kivy.graphics import Color 

kv = """ 
#:kivy 1.9.1 
BoxLayout: 
    orientation: 'vertical' 
    Widget: 
     id: w_canvas 
     my_color: (0, 1, 1) 
     canvas: 
      Color: 
       rgb: self.my_color 
      Rectangle: 
       pos: self.pos 
       size: (self.width/2, self.height/2) 
      Color: 
       group: 'b' 
       rgb: (0, .8, 0) 
      Ellipse: 
       group: 'a' 
       pos: (self.pos[0], self.pos[1] + self.height/2) 
       size: (self.width/4, self.height/4) 
      Ellipse: 
       group: 'b' 
       pos: (self.pos[0]+ self.width/2, self.pos[1] + self.height/2) 
       size: (self.width/4, self.height/4) 
    Button: 
     text: 'Click me' 
     on_release: app.handle_button() 
""" 
class Test(App): 
    def build(self): 
     return Builder.load_string(kv) 
    def handle_button(self): 
     # binding Canvas instruction property to Widget property 
     self.root.ids.w_canvas.my_color = (.5, .2, 0) 
     # Access single item of canvas instruction group 
     an_ellipse = self.root.ids.w_canvas.canvas.get_group('a')[0] 
     an_ellipse.pos = (an_ellipse.pos[0] + 10, an_ellipse.pos[1]) 
     # loop through all elements of canvas instruction group 
     for gitem in self.root.ids.w_canvas.canvas.get_group('b'): 
      if isinstance(gitem, Color): 
       gitem.rgb = (0, .5, 1) 
      try: 
       gitem.size = (gitem.size[0]/2.0, gitem.size[1]) 
      except: 
       pass 

Test().run() 
関連する問題