如果您的定位目標不太複雜,那麼RelativeLayout
就足夠了。
class MainPage(RelativeLayout):
def __init__(self, dispatcher, **kwargs):
super(MainPage, self).__init__(**kwargs)
self.child = ChildWidget(dispatcher, pos=(10,10))
self.add_widget(self.child)
RelativeLayout
的(和一般的任何佈局 - 除了FloatLayout這保持絕對定位)保持兒童更新到父的位置。所有的佈局也是小部件,所以你應該安全。
<ChildWidget>:
size_hint: .1, .05
text: "press me"
on_press: self.parent.pos = (200,200)
<MainPage>:
pos: 400,400
下面是完整的代碼,我想:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.button import Button
Builder.load_string("""
<ChildWidget>:
size_hint: .1, .05
text: "press me"
on_press: self.parent.pos = (200,200)
<MainPage>:
pos: 400,400
""")
class Dispatcher():
pass
class ChildWidget(Button):
def __init__(self, dispatcher, **kwargs):
super(ChildWidget, self).__init__(**kwargs)
self.dispatcher = dispatcher
class MainPage(RelativeLayout):
def __init__(self, dispatcher, **kwargs):
super(MainPage, self).__init__(**kwargs)
self.child = ChildWidget(dispatcher, pos=(10,10))
self.add_widget(self.child)
class TestApp(App):
def build(self):
dispatcher = Widget()
return MainPage(dispatcher)
if __name__ == '__main__':
TestApp().run()