Kivy 语言自动在属性中创建内部绑定。例如,如果我们将父级的位置分配给子级的位置,那么子级的位置将自动更新:
Widget:
Label:
pos: self.parent.pos
在这种情况下,如果我们移动 parent Widget
,那么 child 也会移动。如何解除财产pos
与孩子的绑定?我知道如何解除绑定(属性)[http://kivy.org/docs/api-kivy.uix.widget.html#using-properties] 我绑定自己但是如果我不知道如何解除绑定它绑定的方法的名称。
这是一个小例子来说明我的意思。Button
Up将移动到GridLayout
顶部和底部。中心位于屏幕中间。我的问题是,当我单击向上或向下时,我的居中按钮不再存在。Down
Button
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
Builder.load_string("""
<Example>:
GridLayout:
id: _box
cols: 3
size_hint: .7, .3
pos_hint: {'center_x': .5}
x: 0
Widget:
Button:
pos: self.parent.pos
size: self.parent.size
on_press: _box.y = 0
text: "Down"
Widget:
Button:
pos: self.parent.pos
size: self.parent.size
on_press: self.center_y = root.height/2
text: "Out of the Grid"
Widget:
Button:
pos: self.parent.pos
size: self.parent.size
on_press: _box.top = root.height
text: "Up"
""")
class Example(FloatLayout):
pass
class ExampleApp(App):
def build(self):
return Example()
if __name__ == "__main__":
ExampleApp().run()
在任何情况下,我为什么要这样做?我正在使用GridLayout
不断更新位置的动画。按钮的正常位置应该在网格布局内,但有时其中一个按钮会飞过屏幕并返回到相同的位置。问题是,当我的网格布局也在移动时,我无法让它们飞行,因为属性已绑定,并且一旦按钮尝试飞行,它就会返回网格。这也意味着有时需要绑定。我想要的是控制绑定和解除绑定。