如何在kv屏幕中锁定Y,但不锁定X?

问题描述 投票:0回答:1

我想构建一个屏幕,其中顶部有6个标签,顶部标签有6个输入,然后在输入下方产生了无数个标签。标签/输入的列+行应彼此对齐。

[调整窗口大小时,每个窗口的X都应更改,但是Y应当保持不变(在底部留出空白以容纳其他标签)。为了更清楚一点,我在Excel中模仿了这种情况:

Window before resizing // Window after resizing

我尝试了Grid Layout(其中X和Y总是随窗口调整大小->不适用于我的想法)和Float Layout(放置所有内容(尤其是生成的标签)可能不是最佳解决方案。

不是寻找下面生成标签的逻辑。只是.kv中的布局。

python python-3.x kivy kivy-language
1个回答
0
投票

我将为您提供有关Gridlayout的简短示例。 要在更改屏幕宽度时调整标签的宽度,可以在Window.width上使用bind方法。

每次窗口的宽度更改时,它将调用回调方法,该方法根据总宽度调整标签的宽度。然后,您可以设置标签的高度。由于这现在是静态的,并且您未设置高度绑定,即使它超出了窗口视口,它也将保持不变。

这里是一个简短的代码片段,仅带有一些虚拟标签来向您显示该过程:

示例:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window

Window.size = 600, 400

class MyApp(App):
    def build(self):
        self.columns = GridLayout(cols=5, size_hint_x=None, width=Window.width)
        for lbl in range(0,80):
            self.columns.add_widget(Label(text="Dummy", size_hint=(None, None), size=(Window.width/5, 50)))
        Window.bind(width=self.on_window_width)

        return self.columns

    def on_window_width(self, instance, value):
        self.columns.width = value
        for obj in self.columns.children:
            if isinstance(obj, Label):
                obj.width = value/5


MyApp().run()
© www.soinside.com 2019 - 2024. All rights reserved.