gpt4 book ai didi

python - 根据 child 的大小动态调整小部件的大小

转载 作者:行者123 更新时间:2023-12-01 04:27:50 25 4
gpt4 key购买 nike

我见过this question and answer这非常接近我想要实现的目标。

我希望有一个 ScrollView 来显示我的 MythTV 盒子上即将录制的内容。有一个标题小部件(固定大小)显示日期,还有一个单独的小部件(BoxLayout)用于记录详细信息(如标签子小部件中所示)。

我需要根据文本的高度调整 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 文件中:

class MythRecording(BoxLayout):
rec = DictProperty({})
bg = ListProperty([0.1, 0.15, 0.15, 1])

def __init__(self, **kwargs):
super(MythRecording, self).__init__(**kwargs)
self.rec = kwargs["rec"]

class MythRecordingHeader(BGLabel):
rec_date = StringProperty("")

def __init__(self, **kwargs):
super(MythRecordingHeader, self).__init__(**kwargs)
self.bgcolour = [0.1, 0.1, 0.4, 1]
self.rec_date = kwargs["rec_date"]

这几乎按照我的预期工作 - BoxLayouts 的高度确实有所不同,并且总体上显示所有文本,但有一两次存在一些剪辑。我不清楚这是否是由于水平对齐造成的。

我目前将所有这些子项放入一个 BoxLayout 中。

但是,我真正的问题是我需要将其放入 ScrollView 中(因此是我提到的链接)。为了让滚动正常工作,我认为我需要设置 BoxLayout 的高度,但我真的很难计算它的高度。

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

有没有办法可以获取所有子项的总高度并设置 BoxLayout 的高度,以便我的 ScrollView 能够正常工作?

最佳答案

将 BoxLayout 替换为 GridLayout,并设置:

size: self.minimum_size

GridLayout的minimum_size属性自动跟踪其子级的大小。

关于python - 根据 child 的大小动态调整小部件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com