如何在kivy中将自定义控件大小/位置设置为其父布局?

2024-09-29 19:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图向GridLayout添加一个自定义小部件,但是大小和位置不会动态缩放以适应父布局。我的目标是通过按一个按钮将这些CustomWidgets之一添加到GridLayout中。如果我直接将.kv文件的<CustomWidgets>类的内容复制并粘贴到.kv GridLayout(左图)中,我就能够获得我想要的结果,但是这会避开按钮的作用。在

我链接了一张图片来帮助澄清我的预期结果和实际结果。左图显示了我按三次“添加活动”按钮所需的结果。右图显示了当我尝试通过按三次“添加活动”按钮添加自定义小部件时的实际结果。在

enter image description here

我想这个问题可以解决,如果在添加到GridLayout之后设置了“size_hint_x:self.x”。我试图通过在构建后设置CustomWidget的“size\u hint_x”来设置它以适应.kv GridLayout中的父布局

    CustomWidgets:
        size_hint_x: self.x

运气不好。我可以设置一个数字值作为CustomWidget的宽度,但是它不会动态地改变以适应窗口的大小。在

演示.py

^{pr2}$

演示电压

<CustomGridLayout>:
    id: underlying_layout
    orientation: 'vertical'
    cols: 1
    row: 2

    ScrollView:
        GridLayout: #<- This is the GridLayout I want to add custom widgets to
            id: list_layout
            cols: 1
            height: self.minimum_height
            row_default_height: 60
            size_hint_y: None
            Label:
                height: 20
                text: 'List:'

    AnchorLayout:
        size_hint_y: .4
        Button:
            text: 'Add List Item'
            on_press: root.add_list_item()

<CustomWidgets>
    StackLayout:
        cols: 3
        rows: 1
        orientation: 'lr-tb'
        #size_hint: self.x , None   #<-- Is there a size_hint I can provide that will adjust size once widget is added?
        height: 80
        Button:
            size_hint: .25, None
        TextInput:
            size_hint: .5, None
        Button:
            size_hint: .25, None

Tags: selfnonesize部件动态button布局按钮
1条回答
网友
1楼 · 发布于 2024-09-29 19:30:49

我认为如果您使用CustomWigets扩展StackLayout,而不是包含StackLayout,比如这样:

class CustomWidgets(StackLayout):
    pass

那么,在你的kv文件中:

^{pr2}$

size_hint: 1.0 , None将使CustomWidgets宽度与其父宽度相等。在

当您的CustomWidgets扩展Widget并包含一个StackLayout,那么包含的{}的{}表示其父元素的一部分,即CustomWidgets本身。并且Widget类忽略size_hint,只有Layout类和{}使用它。在

相关问题 更多 >

    热门问题