题
这是我的代码:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.properties import NumericProperty
Builder.load_string('''
<Simple>:
Label:
text: str( root.sometext )
Button:
text: '+++'
on_release: root.inc()
''')
class Simple(BoxLayout):
sometext = NumericProperty(0)
def __init__(self, **kwargs):
super(Simple, self).__init__(**kwargs)
self.sometext = 5
def inc(self):
self.sometext += 5
class TApp(App):
def build(self):
return Simple()
TApp().run()
一切正常,每次按下按钮时标签都会更新 5。
我不会添加一些动画。喜欢:更新前的数字从左到右,更新后的数字从右到左。如果这动画很复杂,欢迎其他概念。
如何做呢 ?我查看了文档,但每个示例都带有位置,而不是文本更新(或者至少是我发现的)。
解决方案
@inclement是对的。我认为不可能直接对文本进行动画处理,但是可以对标签进行动画处理。也可以连接动画(运算符“+”)并使用该事件 on_complete
将动画放在中间,就像您正在寻找的增量一样。
这很简单,但您需要对代码进行一些更改:
您需要能够访问
Label
来自Python:1.1.添加一个
id
到标签:Label: id: _the_label
1.2.添加一个
ObjectProperty
到Simple
班级:class Simple(BoxLayout): the_label = ObjectProperty(None)
1.3.“连接”
id
和ObjectProperty
:<Simple>: the_label: _the_label
确保
Label
有向左或向右移动的空间。一种方法是:2.1 嵌入
Label
进入另一个Widget
, , 在这种情况下RelativeLayout
:RelativeLayout: Label:
2.2 定义尺寸
Label
并将其居中:size_hint: 0.3, 0.1 center_x: self.parent.width/2 center_y: self.parent.height/2
现在您可以继续创建动画的方法
Label
:def animate(self): left = Animation(x=0, color= [0,0,0,0]) left.bind(on_complete=self.inc) right = Animation(center_x=self.the_label.parent.width/2, color= [1,1,1,1]) anim = left + right anim.start(self.the_label) def inc(self, instance, value): self.sometext += 5
注意: 这
bind
到左边的动画on_complete
致方法公司另请注意anim = left + right
连接两个动画。还有运营商*
运行并行动画。
尽管不可能直接对文本进行动画处理,但 Label 的某些属性会间接影响它。例如,字体大小、颜色等。这里有一个 完整列表. 。我确信应该有一种方法可以通过动画来破解文本的移动 padding
财产, ,如果您确实需要为文本添加动画效果。
最终代码在这里:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.properties import NumericProperty, ObjectProperty
from kivy.animation import Animation
Builder.load_string('''
<Simple>:
the_label: _the_label
RelativeLayout:
Label:
id: _the_label
size_hint: 0.3, 0.1
center_x: self.parent.width/2
center_y: self.parent.height/2
text: str( root.sometext )
Button:
text: '+++'
on_release: root.animate()
''')
class Simple(BoxLayout):
the_label = ObjectProperty(None)
sometext = NumericProperty(5)
def animate(self):
left = Animation(x=0)
left.bind(on_complete=self.inc)
right = Animation(center_x=self.the_label.parent.width/2)
anim = left + right
anim.start(self.the_label)
def inc(self, instance, value):
self.sometext += 5
class TApp(App):
def build(self):
return Simple()
TApp().run()
其他提示
怎么办?我看了记录,但每个例子都是用帖子,而不是文本更新(或至少我找到了什么)。
kivy的动画修改特定属性,我认为在此上下文中,我认为动画文本实际上是有意义的。
它听起来可以获得您想要的行为,您真的需要添加一个或多个标签,它的位置被动画才能获得运动效果 - 即,动画类没有让你动画一个属性(文本)通过改变他人(POS),它只以一种特定方式更改一个特定属性。如果这是动画复杂,其他概念会受到欢迎。
如果我想这样做,我实际上会看看使用两个标签的旋转木马小部件。 inc
方法将更改当前隐藏标签的文本,然后调用切换当前可见窗口小部件的旋转木马方法。旋转木马已经有一个动画,其中第一个小部件在下一个幻灯片上滑落,所以它会为您提供详细信息。
这是非常具体的,但是,使用旋转木马恰好恰好适合您的特殊问题。我认为对你的问题的真实答案是你需要考虑自己添加更复杂的行为,因为它不是一个只是动画一个属性的情况。