2016-11-18 2 views
1

私はウィジェットクラスSidePanelを持っています。それには、タイプSidePanelButtonの要素が含まれます。 SidePanelButtonを押すと、SidePanelのオブジェクトであるルートウィジェットにon_pressイベントが送出されます(すべてのボタンが同じイベントを送出します)。kivy:on_pressイベントでルートウィジェット内のネストされたボタンの色を変更してください

呼び出されたメソッドでは、押されたボタンの色を(アニメーションでは透視して)変更したいと思います。 selfSidePanelオブジェクトであるため、は機能しません。その機能で押されたボタンオブジェクトを使用する方法はありますか?または他の方法ですか?

完全なコードとKV定義:

class SidePanelButton(Button): 
    title = StringProperty('') 
    '''Titel of the SidePannelButton 

     :attr:`title` is a :class:`~kivy.properties.StringProperty` and 
     defaults to ''. 
    ''' 

    level = NumericProperty(0.1) 
    '''Indentation level of the SidePanelButton :attr:`title`. 

     :attr:`level` is a :class:`~kivy.properties.NumericProperty` and defaults to 0.1. The default range 
     is between 0.0 and 1.0. 
    ''' 

class SidePanel(StackLayout): 

    def __init__(self, **kwargs): 
     self.register_event_type('on_button1') 
     self.register_event_type('on_press') 
     super(SidePanel, self).__init__(**kwargs) 

    def on_press(self, *args): 
     # not working 
     #self.background_color = [1,1,1,1] 

     Logger.debug('SidePanel: on_press') 
     pass 

    def on_button1(self): 
     Logger.debug('SidePanel: on_button1') 
     pass 

------------------------------------------------------------------ 

<SidePanelButton>: 
    size_hint: (1, None) 
    height: '48dp' 
    background_color: 0.3,0.3,0.3,1 
    background_normal: '' 
    background_down: '' 
    GridLayout: 
     rows: 1 
     height: self.parent.height 
     pos: self.parent.pos 
     Widget: 
      size_hint: (root.level,1) 
     Label: 
      markup: True 
      size_hint: (1,1) 
      text_size: self.size 
      text: root.title 
      font_size: self.height * 0.4 
      halign: 'left' 
      valign: 'middle' 

<[email protected]>: 
    level: 0.1 

<[email protected]>: 
    level: 0.25 

<SidePanel>: 
    orientation: 'tb-rl' 
    canvas: 
     Color: 
      rgba: 0.3,0.3,0.3,1 
     Rectangle: 
      pos: self.pos 
      size: self.size 
    SidePanelButtonL1: 
     title: 'Button1' 
     on_press: root.dispatch('on_press') 
     on_release: root.dispatch('on_button1') 
    SidePanelButtonL2: 
     title: 'Button2' 

答えて

1

あなただけ

... 
SidePanelButtonL1: 
    title: 'Button1' 
    on_press: root.dispatch('on_press') 
    on_release: root.on_button1(self) 


... 
def on_button1(self, bt1): 
    Logger.debug('SidePanel: on_button1 %s' % bt1) 
    pass 
+0

別のバージョンが 'root.dispatchを呼び出すために、引数としてボタンオブジェクトとされon_button1呼び出すことができます( 'on_press'、自己) 'メソッドは変更されません。 –

関連する問題