Kivy - 如何设置一段代码的持续时间?
Kivy - How to set duration for a piece of code?
我有:
Button:
text: "SEQUENCE 2"
size_hint: None, .16
width: 225
on_press:
self.background_color = (1.7, 0, 1.7, 1)
我希望 'self.background_color' 在 'on_press'.
一定秒数后切换回正常状态(按下前的状态)
我该怎么做?
编辑(在 .kv StackLayout 中是所需的位置。)
<ContScreen>:
StackLayout
orientation: "tb-rl"
spacing: 15
Button:
text: "SEQUENCE 1"
size_hint: None, .16
width: 225
Button:
text: "SEQUENCE 2"
size_hint: None, .16
width: 225
如果无法集成到 .kv StackLayout 中,我如何重新格式化它以基于“<>”方法工作。
- 使用Clock.create_trigger()创建触发事件。
- 当持续时间到期或达到时,将按钮的 background_color 重置为默认颜色 [1, 1, 1, 1]
示例
main.py
from kivy.app import App
from kivy.uix.button import Button
from kivy.clock import Clock
class ButtonBackgroundColourDemo(Button):
def on_press(self):
print("\non_press")
self.duration = 5
self.background_color_event = Clock.create_trigger(self.set_background_colour, 1)
self.background_color = (1.7, 0, 1.7, 1)
self.background_color_event()
def set_background_colour(self, dt):
print("\tdt=", dt)
self.duration -= 1
if self.duration <= 0:
self.background_color = [1, 1, 1, 1] # reset to default colour
else:
self.background_color_event()
class Test(App):
def build(self):
return ButtonBackgroundColourDemo()
if __name__ == "__main__":
Test().run()
test.kv
#:kivy 1.11.0
<ButtonBackgroundColourDemo>:
text: "SEQUENCE 2"
size_hint: None, .16
width: 225
输出
我有:
Button:
text: "SEQUENCE 2"
size_hint: None, .16
width: 225
on_press:
self.background_color = (1.7, 0, 1.7, 1)
我希望 'self.background_color' 在 'on_press'.
一定秒数后切换回正常状态(按下前的状态)我该怎么做?
编辑(在 .kv StackLayout 中是所需的位置。)
<ContScreen>:
StackLayout
orientation: "tb-rl"
spacing: 15
Button:
text: "SEQUENCE 1"
size_hint: None, .16
width: 225
Button:
text: "SEQUENCE 2"
size_hint: None, .16
width: 225
如果无法集成到 .kv StackLayout 中,我如何重新格式化它以基于“<>”方法工作。
- 使用Clock.create_trigger()创建触发事件。
- 当持续时间到期或达到时,将按钮的 background_color 重置为默认颜色 [1, 1, 1, 1]
示例
main.py
from kivy.app import App
from kivy.uix.button import Button
from kivy.clock import Clock
class ButtonBackgroundColourDemo(Button):
def on_press(self):
print("\non_press")
self.duration = 5
self.background_color_event = Clock.create_trigger(self.set_background_colour, 1)
self.background_color = (1.7, 0, 1.7, 1)
self.background_color_event()
def set_background_colour(self, dt):
print("\tdt=", dt)
self.duration -= 1
if self.duration <= 0:
self.background_color = [1, 1, 1, 1] # reset to default colour
else:
self.background_color_event()
class Test(App):
def build(self):
return ButtonBackgroundColourDemo()
if __name__ == "__main__":
Test().run()
test.kv
#:kivy 1.11.0
<ButtonBackgroundColourDemo>:
text: "SEQUENCE 2"
size_hint: None, .16
width: 225