Как вращать виджет много раз? - PullRequest
0 голосов
/ 11 декабря 2018

Официальный пример из здесь показывает, как вращать виджет один раз :

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()

Но если я хочу создать цикл вращения, т.е.как изменить угол (и показать результат) много раз?

1 Ответ

0 голосов
/ 11 декабря 2018

сделать количество поворота на угол для 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()
...