Kivy 中的 RelativeLayout 是一种布局管理器,它允许我们将窗口中小部件的位置与其父级容器的位置相对应。我们可以指定一个小部件相对于另一个小部件、相对于布局的左侧、右侧、中心等位置来放置它们。这种相对位置的布局方式可以使得我们的应用程序在不同设备上都能够适应屏幕大小和分辨率的变化。
下面是一个简单的 RelativeLayout 示例,演示如何将三个小部件相对于布局进行排列:
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.label import Label
from kivy.uix.button import Button

class RelativeLayoutApp(App):
    def build(self):
        # 创建 RelativeLayout
        layout = RelativeLayout()

        # 添加 Label
        label = Label(text='Hello World!', font_size=20, size_hint=(None, None), size=(200, 50))
        layout.add_widget(label)

        # 添加 Button
        button = Button(text='Click me!', size_hint=(None, None), size=(100, 50))
        layout.add_widget(button)
        # 将 Button 设置为位于 Label 的右上角
        layout.add_widget(button, pos=(label.width, label.height))

        # 添加另一个 Label
        another_label = Label(text='Welcome!', font_size=20, size_hint=(None, None), size=(200, 50))
        layout.add_widget(another_label)
        # 将另一个 Label 设置为位于父布局的中央位置
        layout.add_widget(another_label, center=layout.center)

        return layout

if __name__ == '__main__':
    RelativeLayoutApp().run()
在这个示例中,我们首先导入了 Kivy 中的 RelativeLayout 和一些小部件。然后,我们创建了一个 RelativeLayout 实例,并添加了一个 Label 和一个 Button。我们使用 add_widget() 方法指定 Button 相对于 Label 的位置。我们还添加了另一个 Label 并将其放置在布局的中心位置。最后,我们返回 RelativeLayout 实例。
当我们运行这个应用程序时,我们应该能够看到包含三个小部件的窗口,其中 Button 位于 Label 的右上角,而另一个 Label 位于布局的中心位置。
Button:
    font_size:20
    size_hint:0.2,0.3
<RelativeLayoutW>:
    BoxLayout:

    RelativeLayout:
        Button:
            text:"你好 chatGPT"
            background_color:.3,.3,.3,1
            pos_hint:{"right":1,"top":1}
        Button:
            text:"你好 chatGPT"
            background_color:.3,.3,.3,1
            pos_hint:{"x":0,"top":1}

        Button:
            text:"相对的"
            background_color:.3,.5,.6,1
            pos_hint:{"center_x":.5,"center_y":0.5}

        Button:
            text:"第三"
            background_color:.6,.4,.3,1
            pos_hint:{"x":0,"y":0}
            
        Button:
            text:"第四"
            background_color:.3,.63,.3,1
            pos_hint:{"right":1,"y":0}
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.core.text import  LabelBase
LabelBase.register("Roboto","HelloKitty.TTF")


class RelativeLayoutW(RelativeLayout):
    def __init__(self):
        super(RelativeLayoutW, self).__init__()
        # self.join = Button(text="hello world")
        # self.add_widget(self.join)


class RelativeApp(App):
    def __init__(self):
        super(RelativeApp, self).__init__()

    def build(self):
        return RelativeLayoutW()

if __name__ == '__main__':
    RelativeApp().run()