【问题标题】:kivy: Problem with the StackLayout's minimum heightkivy:StackLayout 的最小高度有问题
【发布时间】:2022-01-17 18:30:47
【问题描述】:

我正在尝试制作一个可滚动的按钮列表。 当我构建按钮堆栈时,StackLayout 有一个名为 minimum_height 的参数,该参数由布局自动设置(因此它表示 kivy doc)。

但是当我运行调试时,我发现那个参数总是0。

我认为随着我添加更多按钮,它应该会发生变化,但事实并非如此。我不知道为什么。

from kivy.uix.button import Button
from kivy.app import App
from kivy.uix.scrollview import ScrollView
from kivy.uix.stacklayout import StackLayout

class MenuFases(StackLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.btns = []
        for i in range(0, 20):
            self.btns.append(Button(text=f'{i+1}º fase', size_hint=(1, .1)))
            self.add_widget(self.btns[i])
        self.size_hint=(1, None)
        self.height = self.minimum_height
        print(self.minimum_height)

class ScrollMenu(ScrollView):
    def __init__(self, **kwargs):
        super(ScrollMenu, self).__init__(**kwargs)
        fase = MenuFases()
        self.add_widget(fase)

class MyApp(App):
    def build(self):
        return ScrollMenu()

MyApp().run()

【问题讨论】:

    标签: python kivy scrollview stacklayout


    【解决方案1】:

    每当布局提供minimum_heightminimum_width 等属性时,这意味着它将自动计算包含其所有子级所需的最小高度(或宽度)。

    所以在这里你希望它在垂直方向上自动增长。但是您的代码中的问题是,

    1. 您没有明确指定子(此处为 Button)小部件的高度,而是将 size_hint_y 设置为 0.1,这意味着它将始终包含在布局空间内。但同样,

    2. 您使用ScrollView 以便在子小部件超出布局边界时(垂直)滚动。

    要解决这两个问题,您必须明确指定子窗口小部件的高度并让布局监听该更改(这样只要孩子超出其边界,您就可以滚动)。对于后一部分,您必须 bind 一个回调函数,它将为您完成剩下的工作。在纯 python 中你必须手动定义它,但在 kv-lang 中它会自动处理它。

    所以你需要的改变(正如我发现的那样),

    for i in range(0, 20):
                self.btns.append(
                    Button(
                        text=f'{i+1}º fase',
                        size_hint_y=None, # You need to set...(next line)
                        height = 200, # an explicit value.
                    )
                )
                self.add_widget(self.btns[i])
            self.size_hint=(1, None)
            self.bind(minimum_height = self.setter("height")) # Listen to the change and set height accordingly.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 2014-05-31
      • 2012-10-24
      • 1970-01-01
      • 2015-09-27
      • 2012-12-14
      • 2011-03-11
      • 2017-11-21
      相关资源
      最近更新 更多