需要帮助理解 kivy 中的 size_hint

Posted

技术标签:

【中文标题】需要帮助理解 kivy 中的 size_hint【英文标题】:Need help understanding size_hint in kivy 【发布时间】:2016-01-18 11:32:58 【问题描述】:

我想知道是否能解释 size_hint 在 Kivy 中的工作原理。据我了解,它是从小部件到其父布局的相对比例。我尝试了以下代码:

    class TestFrame(GridLayout):
        def __init__(self, **kwargs):
            GridLayout.__init__(self, **kwargs)
            self.rows = 1
            self.add_widget(Label(text='test_num', size=(100, 25), size_hint=(.10, None)))
            self.add_widget(Label(text='test_txt', size=(100, 25), size_hint=(.75, None)))
            self.add_widget(Button(text='test_btn', size=(100, 25), size_hint=(.15, None)))

这是我所期望的:

    |----------------------------------------------------------------------|
    |Test_num :                       Test_txt                :  Test_btn  |

结果却是这样:

    |----------------------------------------------------------------------|
    |                                    Test_num :  Test_txt   : Test_btn |

我玩过 size_hint 和 size 的不同组合,最终得到非常相似的结果。我错过了什么或不理解什么?

【问题讨论】:

【参考方案1】:

据我所知,size_hintsize 的使用是不兼容的,当您将它们设置为相同的属性时,例如为两者设置 x 或 y。使用其中一种。如果你仔细想想,这是有道理的。使用size,您可以显式设置小部件的大小,而使用size_hint,您还可以显式设置小部件的大小,只是以不同的方式,即相对于小部件父级。因此,如果您将两者用于相同的属性 x 或 y,它们必然会发生冲突。

这里的例外情况可能是,例如,size_hint_y 设置为 None,就像您在上面所做的那样,然后为 y 指定 size。或者,如果您将 size_hint_x 设置为 None,并且只为 x 指定了 size

但是,您在上面设置了 x 的 size,并在所有实例中设置了 x 的 size_hint

所以: 这些应该没问题

size_hint=(None, .5), width=100
size_hint=(.5, None), height=100

这些会冲突

size_hint=(.6, .5), size=(34, 66)
size_hint=(None, 55), height=80

【讨论】:

我刚刚又试了一次,但没有任何作用。 呃,我觉得自己像个白痴,我在班级顶部有另一个小部件,但我忽略了它,它不包括 size_hint。因为我没有在所有这些上都使用 size_hint,所以它不能正常工作。

以上是关于需要帮助理解 kivy 中的 size_hint的主要内容,如果未能解决你的问题,请参考以下文章

Python Kivy ScrollView size_hint的问题

无法理解 size_hint。为啥这个 .kv 简单的代码不能像我预期的那样工作?

ScrollView 中的 Kivy StackLayout

Kivy:GridLayout 中的按钮有间隙

Kivy TextInput 和字体

Kivy (KivyMD) 中的按钮和小部件大小