根据子控件的大小动态调整小部件的大小

2024-09-27 23:24:28 发布

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

我已经看到了this question and answer,这与我要达到的目标非常接近。在

我正在寻找一个滚动视图,显示即将在我的MythTV盒录制。有一个显示日期的标题小部件(固定大小)和一个单独的小部件(BoxLayout)用于记录的详细信息(显示在标签子部件中)。在

我需要根据文本的高度调整框布局的大小。这里的问题是,文本最多的标签并不总是同一个标签,所以最大高度需要考虑所有子标签。在

我在KV语言文件里有这个:

<MythRecordingHeader>
    text: root.rec_date
    height: 25
    size_hint_y: None
    halign: "left"

<MythRecording>
    orientation: "horizontal"
    #height: 60
    height: max(mrec_desc.texture_size[1], mrec_time.texture_size[1], mrec_title.texture_size[1])
    size_hint_y: None

    BGLabel:
        id: mrec_time
        size_hint: 0.2, None
        text_size: self.width, None
        height: max(self.texture_size[1], mrec_title.texture_size[1], mrec_desc.texture_size[1])
        #size_hint_x: 0.2
        text: root.rec["time"]
        bgcolour: root.bg

    BGLabel:
        id: mrec_title
        size_hint: 0.3, None
        text_size: self.width, None
        height: max(self.texture_size[1], mrec_time.texture_size[1], mrec_desc.texture_size[1])
        #size_hint_x: 0.3
        text: "{}\n{}".format(root.rec["title"], root.rec["subtitle"])
        halign: "left"
        bgcolour: root.bg

    BGLabel:
        id: mrec_desc
        text: root.rec["desc"]
        size_hint: 0.5, None
        text_size: self.width, None
        height: max(self.texture_size[1], mrec_time.texture_size[1], mrec_title.texture_size[1])
        halign: "left"
        bgcolour: root.bg

BGLabel是一个自定义小部件,它只是通过bgcolour属性向标签添加纯色背景色)。在

在我的python文件中:

^{pr2}$

这几乎和我所期望的一样——BoxLayouts的高度确实不同,总体上,显示所有的文本,但有一两次会有一些剪辑。我不清楚这是不是因为水平线。在

我现在把所有这些孩子放在一个盒子里。在

然而,我真正的问题是我需要在一个ScrollView中获得这个(因此我提到了这个链接)。为了让滚动工作,我想我需要设置框布局的高度,但我真的很难计算这个高度。在

在BoxLayout的子级上循环并查看height属性只会显示MythRecordings的高度为0。在

有没有办法可以得到所有子对象的总高度,并设置BoxLayout的高度,这样我的滚动视图就可以正常工作了?在


Tags: textselfnonesize高度timetitleroot

热门问题