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

Posted

技术标签:

【中文标题】无法理解 size_hint。为啥这个 .kv 简单的代码不能像我预期的那样工作?【英文标题】:Can't understand size_hint. Why this .kv simply code doesn't work as i expected?无法理解 size_hint。为什么这个 .kv 简单的代码不能像我预期的那样工作? 【发布时间】:2018-07-20 12:45:27 【问题描述】:

我正在学习 Kivy 图书馆,但我遇到了一些问题。 我正在尝试做一个简单的换屏应用程序来做一些练习,但我认为我在这里犯了一些错误:

                    BoxLayout:
                        orientation:"horizontal"
                        size_hint:1,0.5
                        Label :
                            text : "Nome :"
                        TextInput :
                            id : _name
                            multiline: False
                        Label :
                            text : "Cognome :"
                        TextInput :
                            id : _surname
                            multiline: False

代码是:

<ROT>:
    FloatLayout:
        AnchorLayout:
            anchor_y : "top"
            anchor_x: "right"
            BoxLayout:
                orientation : "horizontal"
                spacing: 10
                size_hint: 0.4,0.1
                Button:
                    id : "_bfr"
                    text : "<-----"

                Button:

                    id : "_aft"
                    text : "----->"
        AnchorLayout :
            anchor_x : "center"
            anchor_y : "bottom"
            ScreenManager:
                size_hint_y : 0.9
                id : _manager
                Screen :
                    name : "uno"
                    BoxLayout :
                        padding :50
                        spacing :10
                        orientation : "vertical"
                        BoxLayout:
                            orientation:"horizontal"
                            size_hint:1,0.5
                            Label :
                                text : "Nome :"
                            TextInput :
                                id : _name
                                multiline: False
                            Label :
                                text : "Cognome :"
                            TextInput :
                                id : _surname
                                multiline: False

我希望最后写入的 boxlayout 是包含它的屏幕的 1/2。 我不明白如果

大小提示

与窗口的尺寸或包含该小部件的“父”的尺寸相关联

【问题讨论】:

【参考方案1】:

Size_hints 通常引用您的父窗口小部件。在这种情况下,BoxLayout 是 ScreenManager 的 0.5,即窗口的 0.9。在这种情况下,BoxLayout 是垂直窗口的 45%。

如果您希望 BoxLayout 恰好占据屏幕的 50%,您可以参考您的根小部件大小(箭头中包裹的最顶层父级)


size_hints 通常引用直接父窗口小部件。但是,您可以通过编写如下内容直接引用您的根小部件(用箭头包裹的顶部小部件)来更改此设置:

<Root>:
    WidgetLayout1: 
        size_hint: .2, .2
        BoxLayout:
            size_hint: root.width, root.height / 2

在这种情况下,BoxLayout 比其父级大,因为它的大小等于根小部件的整个宽度,以及它的一半高度。

但是,在您的示例中,您的第二个框位于另一个具有填充和间距的 BoxLayout 内,该框有自己的间距和尺寸规则,可能会推翻您自己定义的尺寸提示。更不用说 AnchorLayout 的其他规则,它们会将您进一步限制在屏幕的某些区域。

您可以在此处阅读有关BoxLayout 的更多信息。

【讨论】:

谢谢,我已经解决了在底部添加标签

以上是关于无法理解 size_hint。为啥这个 .kv 简单的代码不能像我预期的那样工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的屏幕管理器不接受 .kv 文件中的所有屏幕?

为啥 kv 文件变量不接受自我?

Kivy ScrollView - 不滚动

Kivy,弱引用对象不再存在

如何在 Kivy 中居中按钮?

如何在 kivy python 中使用 size_hint 制作标签