我有一个小部件类SidePanel
。它将包含SidePanelButton
类型的元素。如果按下一个SidePanelButton
,它会将on_press
事件发送到根窗口小部件,该窗口小部件是SidePanel
的对象(每个按钮都会调度相同的事件)。
在被调用的方法中,我想改变按下按钮的颜色(透视动画)。由于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'
<SidePanelButtonL1@SidePanelButton>:
level: 0.1
<SidePanelButtonL2@SidePanelButton>:
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'
答案 0 :(得分:1)
您可以使用按钮对象作为参数调用on_button1
int i = Convert.ToInt32(dt.Rows.Count);