Python 在ListView中作为元素的自定义小部件
我只想写一个聊天室应用程序,并想实现ListView中的消息列表so-message概念Python 在ListView中作为元素的自定义小部件,python,kivy,Python,Kivy,我只想写一个聊天室应用程序,并想实现ListView中的消息列表so-message概念 但是我不知道怎么做,因为kivy上的列表适配器只能接受列表中的ListItemButton或ListItemLabel元素。他不接受我的自定义类的类型,甚至不接受简单的BoxLayout。提前谢谢你。我建议你使用QtWebKit for your聊天程序,因为在聊天中使用HTML标记非常理想-它为你提供了无限的聊天信息 您可以使用标签嵌入图像,将文本设置为粗体或斜体 您可以使用标签嵌入youtube(和其
但是我不知道怎么做,因为kivy上的列表适配器只能接受列表中的ListItemButton或ListItemLabel元素。他不接受我的自定义类的类型,甚至不接受简单的BoxLayout。提前谢谢你。我建议你使用QtWebKit for your聊天程序,因为在聊天中使用HTML标记非常理想-它为你提供了无限的聊天信息 您可以使用标签嵌入图像,将文本设置为粗体或斜体 您可以使用标签嵌入youtube(和其他)视频 您所需要的是:
通过
viewclass
它意味着您的自定义列表项小部件。首先,您不再使用ListView,因为它已被弃用,kivy建议使用RecycleView,其概念类似于ListView,有一个数据字段是字典列表,其中,字典是使用视图的小部件为创建每个项目而接收的属性
假设自定义小部件已经有了它,那么您必须公开列表可以修改的所有属性,在示例中有3个属性:source_image、title和message
from kivy.app import App
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
Builder.load_string('''
<CustomWidget@BoxLayout>:
source_image: ""
title: ""
message: ""
orientation: 'horizontal'
Image:
source: root.source_image
size_hint_x: 1
BoxLayout:
size_hint_x: 2
orientation: 'vertical'
Label:
text: root.title
size: self.texture_size
size_hint_y: None
Label:
text: root.message
<View>:
viewclass: 'CustomWidget'
RecycleBoxLayout:
default_size: None, dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
''')
class View(RecycleView):
def __init__(self, **kwargs):
super(View, self).__init__(**kwargs)
self.data = [{'source_image': "heart.png", 'title': "title{}".format(i), 'message': "message"} for i in range(100)]
if __name__ == '__main__':
runTouchApp(View())
从kivy.app导入应用
从kivy.base导入runTouchApp
从kivy.lang导入生成器
从kivy.uix.recycleview导入recycleview
Builder.load_字符串(“”)
:
源图像:“
标题:“
信息:“
方向:“水平”
图片:
来源:root.source\u图像
大小提示:1
盒子布局:
尺寸提示:2
方向:“垂直”
标签:
文本:root.title
大小:self.texture\u大小
尺寸提示:无
标签:
文本:root.message
:
viewclass:'CustomWidget'
循环利用布局:
默认大小:无,dp(56)
默认大小提示:1,无
尺寸提示:无
高度:自身最小高度
方向:“垂直”
''')
类视图(RecycleView):
定义初始(自我,**kwargs):
超级(视图,自我)。\uuuuu初始化(**kwargs)
self.data=[{'source_image':“heart.png”,“title':“title{}”.format(i),'message':“message”}表示范围(100)内的i)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
runTouchApp(视图())
谢谢你的回答,但我需要了解Kivy。