我的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
感谢任何有关正确方向的帮助/建议或指示:)
答案 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)
如果你发布一个可运行的例子,我可能会帮助你更多,我猜......