Kivy Label 添加文本而不重叠

Posted

技术标签:

【中文标题】Kivy Label 添加文本而不重叠【英文标题】:Kivy Label add text without overlapping 【发布时间】:2019-12-17 13:25:40 【问题描述】:

我正在制作一个简单的聊天室应用程序,它运行良好,除了当用户输入一条长消息时,它会与ScrollView 中的其他消息重叠,如下所示:

这是标签的代码:

message_lab = Label(text=text, markup=True, size_hint_y=None)
message_lab.width = self.width
message_lab.text_size = message_lab.width, None
self.chat.add_widget(message_lab)
self.scroller.scroll_to(message_lab)

备注:

self.width 的值为 800

self.chatBoxLayout,这是 ScrollView 内部的布局

self.scrollerScrollView

非常感谢我收到的任何帮助!

【问题讨论】:

【参考方案1】:

使用 kv 规则和 Label 子类,例如:

<YourLabel>:
    height: self.texture_size[1]
    text_size: self.width, None

【讨论】:

谢谢!这行得通,但是当我尝试在 python 代码中做同样的事情时,它不起作用。你知道这是为什么吗? 您可能实际上并没有在 Python 代码中做同样的事情。这里的 kv 示例自动创建一个绑定,以便 text_size 在 self.width 更改时更新,而 height 在 self.texture_size 更改时更新。您可以在 Python 中执行此操作,但必须显式进行绑定以执行更新。 这很好用。虽然我更喜欢在代码中做事,并且确实做了它的 Python 绑定版本 - 几乎 工作方式相同。出于某种原因,当窗口调整大小时,它不会通知标签进行更新(或其他东西)。虽然我知道 .kv 语言的原因,但不确定我是否真的喜欢它——引擎盖下有很多魔法。 :)

以上是关于Kivy Label 添加文本而不重叠的主要内容,如果未能解决你的问题,请参考以下文章

将文本渲染到 kivy 画布

为啥我需要创建 Line 的新实例,而不是在 Kivy 中简单地更新或添加和删除它

为啥我需要创建 Line 的新实例,而不是在 Kivy 中简单地更新或添加和删除它

使用 FloatLayout 在 Kivy 中重叠文本输入

为啥不可能在 kivy 中制作 Markup TextInput?

在 kivy2 或 kivymd 中,有没有一种方法可以动态创建屏幕而不将它们添加到 kv 文件中