我正在尝试制作简单的聊天流媒体。我正在努力的是让聊天消息左对齐,并根据窗口大小动态包装文本。
我们的想法是将聊天消息显示为网格布局中的标签。
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'
答案 0 :(得分: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设置。如果您在kv中也设置了halign,则可以完全删除__init__
。