1
我有一個窗口小部件類SidePanel
。它將包含SidePanelButton
類型的元素。如果一個SidePanelButton
被按下,它將調度on_press
事件到作爲SidePanel
(每個按鈕將分派相同事件)的對象的根部件。kivy:使用on_press事件更改根窗口小部件中嵌套按鈕的顏色
在被調用的方法中,我想更改按下按鈕的顏色(透視動畫)。 self.background_color = <new value>
將不起作用,因爲self
是SidePanel
對象。有沒有辦法在該函數中使用按下的按鈕對象?或者其他方法?
完整代碼和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'
另一個版本叫'root.dispatch( 'on_press',個體經營) '這個方法不會改變。 –