无法在Kivy中为动画选择id

时间:2017-06-27 00:54:33

标签: android python python-3.x kivy kivy-language

我的python代码中有一个kv段。

我想要做的是选择此按钮并为其设置动画。通过按NoButton触发动画本身。 NoButton有一个属于root小部件类的子类。不幸的是,尽管能够成功地从kv代码中引用id,我似乎无法真正利用它。

NoButton会导致任何结果。没有错误,没有。如果我尝试打印id,我得到的是它引用的按钮的位置:

<__main__.MainButton object at 0x7fd5db0d5590>

以下是kv代码的片段:

<MainClass>:
<MainScreen>:
    id: main

    AnchorLayout:
        size: root.size
        anchor_x: 'center'
        anchor_y: 'center'
        padding: 0, 0, 0, 50
        MainButton:
            id: pics
            rgba: 1,5,1,1
            size_hint_x: None
            size_hint_y: None
            height: main.height / 1.5
            width: main.width / 1.5 

和python:

class MainScreen(Screen):
    pass

class MainButton(Button):
    pass

class NoButton(ButtonBehavior, Image, MainClass):
    def on_press(self):     
        anim = Animation(x=300, y=300)
        anim.start(MainButton())
        print(MainScreen().ids.pics)

你会注意到anim.start引用了这个类,而不是这里的id。不幸的是它会产生相同的结果;什么都没有。

创建pics作为对象属性,并声明在kv中也无法正常工作。

我真的在这里完全无能为力。我已经查看了几个略有相似的问题,但在帮助/指导深入开发kivy方面确实没有多少。

我使用的是Python 3.5.3和Kivy 1.9.2-dev0

感谢任何有关正确方向的帮助/建议或指示:)

1 个答案:

答案 0 :(得分:2)

您正在创建新对象,而不是引用现有对象

    anim.start(MainButton()) #new MainButton Object :(
    print(MainScreen().ids.pics) #also a new MainScreen object

我在代码中没有看到NoButton,但是应该保留MainScreen 实例并从中提取MainButton 实例

main_button = main_screen.ids.pics
ani.start(main_button)

如果你发布一个可运行的例子,我可能会帮助你更多,我猜......