Kivy - 居中 BoxLayout

Kivy - centering BoxLayout

我正在学习 Kivy,我正在尝试将主要的垂直 BoxLayout 与内容(boxlayouts、文本、输入、图像等)居中。根 window 是 1200px 宽,BoxLayout 是 1000px.

我尝试使用 AnchorLayout 而不是 BoxLayout,但是内容超出 window 或者所有内容都在角落里,我无法将其居中。

此外,内容可能高于根 window。我怎样才能让它不跟随根高度?

有人可以帮我解决这个问题吗?

这是 Py 文件:

Import kivy
from kivy.app import App
from kivy.core.window import Window
Window.size = (1440, 720)
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.image import Image
from kivy.core.window import Window

class Exec(Widget):
     def __init__(self, **kwargs):        
         super(Exec, self).__init__(**kwargs)  

class TC(App): 
    def build(self):
        Window.clearcolor = (25/255,26/255,25/255,0)
        return Exec()
    
if __name__ == '__main__':
    TC().run()

和KV文件...

<Exec>
BoxLayout:
    orientation: 'vertical'
    BoxLayout:
        size: 1000, 700
        position_hint: {'center_x':0.5, 'center_y':0.5}
        orientation: 'vertical'
        position_hint: None, None
        position_x: 150
        GridLayout:
            cols: 2
            size_hint_y: None
            height: 75
            Image:
                source: 'traffic-light.png'
                size: self.texture_size
                size_hint_x: None
                size_hint_y: None
                width: 120
                height: 50

            Label:
                multiline: True
                font_size: 24
                markup: True
                text: "[b]Intelligent Traffic Control System[/b] \n[size=18][color=b4afaf]Developed for testing purposes only[/color][/size]"
                text_size: self.size
                halign: 'left'

        GridLayout:
            cols: 3
            size_hint_y: None
            height: 150
            Label:
                text: "Deviation"
                font_size: 18
                text_size: self.size
                halign: 'left'
            Label:
                text: "Deviation muliplier"
                font_size: 18
                text_size: self.size
                halign: 'left'
            Label:
                text: "Envelope Inflate [+]/ Deflate [-]"
                font_size: 18
                text_size: self.size
                halign: 'left'
            TextInput:
                multiline:False
                font_size: 32
                foreground_color: (1,1,1,1)
                background_color: (25/255,26/255,25/255,0)
            TextInput:
                multiline:False
                font_size: 32
                foreground_color: (1,1,1,1)
                background_color: (25/255,26/255,25/255,0)
            TextInput:
                multiline:False
                font_size: 32
                foreground_color: (1,1,1,1)
                background_color: (25/255,26/255,25/255,0)

        GridLayout:
            cols: 3
            Label:
                text: "Week days"
                font_size: 18
            Label:
                text: "Saturday"
                font_size: 18
            Label:
                text: "Sunday"
                font_size: 18

        GridLayout:
            cols: 3
            size_hint_y: None
            height: 75
            Label:
                text: "Generate random envelope"
                font_size: 18
            TextInput:
                multiline:False
                font_size: 24
            Button:
                text: "Create & Save"

这是裁剪后的图像,其中包含内容应该如何输入但未输入的内容,以及一张所有内容都在角落里的图像。

谢谢!

问题是您的 Exec class 扩展了 Widget,它不打算用作容器。尝试将您的 Exec 定义更改为:

class Exec(FloatLayout):
    pass