Python 尝试在kivy中的速度计上添加动画
我试着让速度表上的指针从左向右移动。它有制作动画的功能吗?一个简单的函数或帮助就可以了 .py文件Python 尝试在kivy中的速度计上添加动画,python,kivy,Python,Kivy,我试着让速度表上的指针从左向右移动。它有制作动画的功能吗?一个简单的函数或帮助就可以了 .py文件 import kivy from kivy.lang import Builder from kivy.uix.screenmanager import Screen, ScreenManager from kivy.app import App class SpeedWindow(Screen): pass class WindowManager(ScreenManager):
import kivy
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.app import App
class SpeedWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
KV = """
WindowManager:
SpeedWindow:
<SpeedWindow>:
Image:
source: 'cadran.png'
size_hint: None, None
size: 400, 400
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
Image:
source: 'needle.png'
size_hint: None, None
size: 300, 300
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
"""
class MyMainApp(App):
def build(self):
return Builder.load_string(KV)
if __name__ == "__main__":
MyMainApp().run()
导入kivy
从kivy.lang导入生成器
从kivy.uix.screenmanager导入屏幕,screenmanager
从kivy.app导入应用程序
类速度窗口(屏幕):
通过
类WindowManager(屏幕管理器):
通过
KV=”“”
WindowManager:
速度窗口:
:
图片:
来源:“cadran.png”
大小提示:无,无
尺码:400400
位置提示:{'center_x':0.5,'center_y':0.5}
图片:
资料来源:“needle.png”
大小提示:无,无
尺码:300300
位置提示:{'center_x':0.5,'center_y':0.5}
"""
类MyMainApp(应用程序):
def生成(自):
返回生成器。加载字符串(KV)
如果名称=“\uuuuu main\uuuuuuuu”:
MyMainApp().run()
使用旋转
和动画
,可以设置针旋转的动画,如下所示:
from kivy.animation import Animation
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.app import App
class SpeedWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
KV = """
WindowManager:
SpeedWindow:
<SpeedWindow>:
angle: 90 # angle for needle
name: 'speedometer' # every Screen needs a name
Image:
source: 'cadran.png'
size_hint: None, None
size: 400, 400
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
Image:
source: 'needle.png'
size_hint: None, None
size: 300, 300
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
# apply rotation matrix to this Image
canvas.before:
PushMatrix
Rotate:
angle: root.angle
axis: (0, 0, 1)
origin: (self.center_x, self.center_y - self.norm_image_size[1]/2, 0)
canvas.after:
PopMatrix
"""
class MyMainApp(App):
def build(self):
Clock.schedule_once(self.animate_needle, 2.0) # start the animation in 2 seconds
return Builder.load_string(KV)
def animate_needle(self, dt):
# animate the needle from +90 to -90 and then back to +90
self.anim = Animation(angle=-90.0) + Animation(angle=90)
self.anim.repeat = True # repeat forever
speedometer = self.root.get_screen('speedometer')
self.anim.start(speedometer)
if __name__ == "__main__":
MyMainApp().run()
从kivy.animation导入动画
从kivy.clock导入时钟
从kivy.lang导入生成器
从kivy.uix.screenmanager导入屏幕,screenmanager
从kivy.app导入应用程序
类速度窗口(屏幕):
通过
类WindowManager(屏幕管理器):
通过
KV=”“”
WindowManager:
速度窗口:
:
角度:针的90度角
名称:“速度表”#每个屏幕都需要一个名称
图片:
来源:“cadran.png”
大小提示:无,无
尺码:400400
位置提示:{'center_x':0.5,'center_y':0.5}
图片:
资料来源:“needle.png”
大小提示:无,无
尺码:300300
位置提示:{'center_x':0.5,'center_y':0.5}
#将旋转矩阵应用于此图像
在以下情况之前:
推矩阵
轮换:
角度:root.angle
轴:(0,0,1)
原点:(self.center\u x,self.center\u y-self.norm\u图像大小[1]/2,0)
在下列情况之后:
流行音乐
"""
类MyMainApp(应用程序):
def生成(自):
时钟。计划一次(self.animate_pine,2.0)#2秒后开始动画
返回生成器。加载字符串(KV)
def动画针(自身,dt):
#将针的动画设置为从+90到-90,然后再回到+90
self.anim=动画(角度=-90.0)+动画(角度=90)
self.anim.repeat=True#永远重复
速度表=self.root.get\u屏幕(“速度表”)
自动动画启动(速度表)
如果名称=“\uuuuu main\uuuuuuuu”:
MyMainApp().run()
您可以使用旋转
和动画
。请参阅类似的应用程序。谢谢!我可以知道PushMatrix和PopMatrix的用途吗?当我运行代码时,我得到一个错误TypeError:必须是实数,不是非类型kivy,它指向角度:根。角度
是否在
部分中包含角度:90
?在显示之前,有一个模型视图
矩阵应用于画布
图形。PushMatrix
将当前矩阵推到堆栈上,然后Rotate
创建一个执行我们所需旋转的新矩阵。然后,PopMatrix
弹出矩阵堆栈以恢复先前保存的矩阵。使用canvas.before
在显示needle.png
图像之前设置旋转,而canvas.after
在显示指针之后恢复旧矩阵。我发布的代码工作正常。一定有别的东西在影响它。