如何多次旋转小部件?
How to rotate a widget many times?
来自 here 的官方示例显示了如何 旋转一次小部件 :
from kivy.app import App
from kivy.lang import Builder
kv = '''
FloatLayout:
Button:
text: 'hello world'
size_hint: None, None
pos_hint: {'center_x': .5, 'center_y': .5}
canvas.before:
PushMatrix
Rotate:
angle: 45
origin: self.center
canvas.after:
PopMatrix
'''
class RotationApp(App):
def build(self):
return Builder.load_string(kv)
RotationApp().run()
但是如果我想创建一个旋转循环,即如何多次改变角度(并显示结果)?
将角度旋转量作为 NumericProperty 附加到可访问的地方(我将其附加到应用程序),然后以时钟间隔更新它
from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import NumericProperty
kv = '''
FloatLayout:
Button:
text: 'hello world'
size_hint: None, None
pos_hint: {'center_x': .5, 'center_y': .5}
canvas.before:
PushMatrix
Rotate:
angle: app.angle
origin: self.center
canvas.after:
PopMatrix
'''
class RotationApp(App):
angle = NumericProperty(25)
def build(self):
def updates_spin(*args):
self.angle += 2
Clock.schedule_interval(updates_spin, 0.05)
return Builder.load_string(kv)
RotationApp().run()
来自 here 的官方示例显示了如何 旋转一次小部件 :
from kivy.app import App
from kivy.lang import Builder
kv = '''
FloatLayout:
Button:
text: 'hello world'
size_hint: None, None
pos_hint: {'center_x': .5, 'center_y': .5}
canvas.before:
PushMatrix
Rotate:
angle: 45
origin: self.center
canvas.after:
PopMatrix
'''
class RotationApp(App):
def build(self):
return Builder.load_string(kv)
RotationApp().run()
但是如果我想创建一个旋转循环,即如何多次改变角度(并显示结果)?
将角度旋转量作为 NumericProperty 附加到可访问的地方(我将其附加到应用程序),然后以时钟间隔更新它
from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import NumericProperty
kv = '''
FloatLayout:
Button:
text: 'hello world'
size_hint: None, None
pos_hint: {'center_x': .5, 'center_y': .5}
canvas.before:
PushMatrix
Rotate:
angle: app.angle
origin: self.center
canvas.after:
PopMatrix
'''
class RotationApp(App):
angle = NumericProperty(25)
def build(self):
def updates_spin(*args):
self.angle += 2
Clock.schedule_interval(updates_spin, 0.05)
return Builder.load_string(kv)
RotationApp().run()