滚动小部件中的 Kivy 标签文本换行

Posted

技术标签:

【中文标题】滚动小部件中的 Kivy 标签文本换行【英文标题】:Kivy Label text wrap in scroll widget 【发布时间】:2016-01-04 16:04:51 【问题描述】:

我正在尝试制作一个简单的聊天流媒体。我正在努力使聊天消息左对齐并根据窗口大小动态包装文本。

这个想法是让聊天消息在网格布局中显示为标签。

class ChatMessage(Label):

    def __init__(self, *args, **kwargs):
        super(ChatMessage, self).__init__(*args, **kwargs)
        self.text_size = self.size
        self.halign = 'left'

class Root(ScreenManager):

    def __init__(self, *args, **kwargs):
        super(ScreenManager, self).__init__(*args, **kwargs)
        self.ids.chatstream.bind(minimum_height=self.ids.chatstream.setter('height'))
        self.add_message()


    def add_message(self):
        for x in xrange(50):
            label = ChatMessage(text='Im still not completely sure I understand the mechanisms at work here, though.. Im still not completely sure I understand the mechanisms at work here, though.. Im still not completely sure I understand the mechanisms at work here, though.' + str(x))

            self.ids.chatstream.add_widget(label)
            self.ids.scroller.scroll_y = 0

kv 文件:

<Root>:
    Screen:
        name: 'main'
        BoxLayout:
            orientation: 'vertical'
            Button:
                text: ''
                on_release: app.root.current = 'chat'

    Screen:
        name: 'chat'
        BoxLayout:
            orientation: 'vertical'
            ScrollView:
                id: scroller
                do_scroll_x: False
                GridLayout:
                    id: chatstream
                    cols: 1
                    padding: (10, 15)
                    spacing: 20
                    size_hint_y: None
            Button:
                text: ''
                on_release: app.root.current = 'main' 

【问题讨论】:

【参考方案1】:

设置 ChatMessage 实例的大小,例如

<ChatMessage>
    size_hint_y: None
    height: self.texture_size[1]  # the size needed to fit the text
    text_size: self.width, None

同时删除 python 大小中的 text_size 设置。如果您也将 halign 设置为 kv,则可以完全删除 __init__

【讨论】:

以上是关于滚动小部件中的 Kivy 标签文本换行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 kivy python 中的标签、文本输入和其他小部件中添加标题

Kivy 更改标签小部件来自另一个类的文本

在 Kivy 中传递自定义小部件属性

更改 Kivy 小部件部分文本的颜色

我可以用啥在 kivy 或 kivymd 中显示段落文本?

更新另一个类中的 kivy 标签文本