kivyMD 中的旋转图像
A spinning image in kivyMD
我正在制作一个 phone 应用程序,它的中心应该有一个旋转的图像。所以我这样做了:
class MainScreen(Screen):
pass
class SecondScreen(Screen):
pass
class WindowManager(ScreenManager):
pass
class MyApp(MDApp):
def build(self):
from threading import Timer
Timer(3.0, self.rotate).start()
def rotate(self):
from time import sleep
while True:
while self.root.current == 'mainscreen':
self.root.get_screen('mainscreen').ids.spin.angle -= 1
sleep(0.01)
这是 .kv 文件:
'''
WindowManager:
MainScreen:
SecondScreen:
<IMG@Image>:
angle: 45
canvas.before:
PushMatrix
Rotate:
angle: root.angle
origin: self.center
canvas.after:
PopMatrix
<MainScreen>:
name: 'mainscreen'
MDBoxLayout:
orientation: 'vertical'
size: root.width, root.height
MDToolbar:
title: "My App"
IMG:
angle: 0
id: spin
source: 'file.png'
allow_stretch: True
<SecondScreen>:
name: 'secondscreen'
'''
函数rotate
是为了使图像旋转。它确实有效,它一直在旋转,但每当我调整 window 的大小时它就会停止旋转。我不知道为什么会这样。有人可以告诉我该怎么做吗?如果有更好的方法让图像旋转我想知道。
您可以使用 Animation
通过动画 angle
来做到这一点。类似于:
class MyApp(MDApp):
def build(self):
self.stop_anim = False
Clock.schedule_once(self.rotate)
def rotate(self, *args):
if self.stop_anim:
return
spinner = self.root.get_screen('mainscreen').ids.spin
spinner.angle = 0
self.anim = Animation(angle=360)
self.anim.bind(on_complete=self.rotate)
self.anim.start(spinner)
我正在制作一个 phone 应用程序,它的中心应该有一个旋转的图像。所以我这样做了:
class MainScreen(Screen):
pass
class SecondScreen(Screen):
pass
class WindowManager(ScreenManager):
pass
class MyApp(MDApp):
def build(self):
from threading import Timer
Timer(3.0, self.rotate).start()
def rotate(self):
from time import sleep
while True:
while self.root.current == 'mainscreen':
self.root.get_screen('mainscreen').ids.spin.angle -= 1
sleep(0.01)
这是 .kv 文件:
'''
WindowManager:
MainScreen:
SecondScreen:
<IMG@Image>:
angle: 45
canvas.before:
PushMatrix
Rotate:
angle: root.angle
origin: self.center
canvas.after:
PopMatrix
<MainScreen>:
name: 'mainscreen'
MDBoxLayout:
orientation: 'vertical'
size: root.width, root.height
MDToolbar:
title: "My App"
IMG:
angle: 0
id: spin
source: 'file.png'
allow_stretch: True
<SecondScreen>:
name: 'secondscreen'
'''
函数rotate
是为了使图像旋转。它确实有效,它一直在旋转,但每当我调整 window 的大小时它就会停止旋转。我不知道为什么会这样。有人可以告诉我该怎么做吗?如果有更好的方法让图像旋转我想知道。
您可以使用 Animation
通过动画 angle
来做到这一点。类似于:
class MyApp(MDApp):
def build(self):
self.stop_anim = False
Clock.schedule_once(self.rotate)
def rotate(self, *args):
if self.stop_anim:
return
spinner = self.root.get_screen('mainscreen').ids.spin
spinner.angle = 0
self.anim = Animation(angle=360)
self.anim.bind(on_complete=self.rotate)
self.anim.start(spinner)