python - 将动态结果(图像)拉入 RecycleView
问题描述
我正在将搜索结果(图像)加载到RecycleView
. 看起来AsyncImage
'ssource
属性在运行时会拉取图像,这让我没有多少机会根据用户的输入来更改它。我正在使用RecycleView
类来显示搜索结果,因此灵活性是关键。
示例代码:
from kivy.app import App
from kivy.uix.recycleview import RecycleView
from kivy.uix.image import AsyncImage
from kivy.properties import StringProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
LINK_HOLDER = ''
class WindowManager(ScreenManager):
pass
class First(Screen):
pass
class Second(Screen):
rv_data = [{'text': 'random text here','source': LINK_HOLDER}] # being assigned at run time ???
'''
links to use:
https://www.dropbox.com/s/cku7lcyyikupyda/ruby.png?raw=1
https://www.dropbox.com/s/nfkkt1b90p2g5qh/python.jpeg?raw=1
https://www.dropbox.com/s/5840br37wwvymtr/julia.png?raw=1
'''
class ImageAndTitle(BoxLayout):
title = StringProperty()
source = StringProperty()
class ExampleApp(App):
def build(self):
return load
load = Builder.load_string('''
WindowManager:
First:
Second:
<First>:
name: 'first'
FloatLayout:
Button:
text: 'Python'
pos: 100, 300
size_hint: None, None
size: 100, 100
on_press:
global LINK_HOLDER
LINK_HOLDER = 'https://www.dropbox.com/s/cku7lcyyikupyda/ruby.png?raw=1'
app.root.current = 'second'
root.manager.transition.direction = 'right'
Button:
text: 'Ruby'
pos: 250, 300
size_hint: None, None
size: 100, 100
on_press:
global LINK_HOLDER
LINK_HOLDER = 'https://www.dropbox.com/s/nfkkt1b90p2g5qh/python.jpeg?raw=1'
app.root.current = 'second'
root.manager.transition.direction = 'right'
Button:
text: 'Julia'
pos: 450, 300
size_hint: None, None
size: 100, 100
on_press:
global LINK_HOLDER
LINK_HOLDER = 'https://www.dropbox.com/s/5840br37wwvymtr/julia.png?raw=1'
app.root.current = 'second'
root.manager.transition.direction = 'right'
<ImageAndTitle>:
Label:
text: root.title
AsyncImage:
source: root.source
<Second>:
name: 'second'
GridLayout:
cols: 2
rows: 1
BoxLayout:
orientation: 'vertical'
RecycleView:
viewclass: 'ImageAndTitle'
data: root.rv_data
RecycleBoxLayout:
default_size_hint: 1, None
default_size: 100, 30
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
BoxLayout:
orientation: 'vertical'
Label:
text: 'five'
Label:
text: 'six'
''')
if __name__ == '__main__':
ExampleApp().run()
有没有办法做到这一点?
解决方案
该解决方案来自 Kivy 核心开发团队的一名成员,绰号 Turtle。诀窍是使用rv_data = ListProperty(allownone=True)
,然后我们可以rv_data
根据需要动态修改/更改属性。
推荐阅读
- r - chromomap 包有什么问题以及如何更改颜色和添加图例?
- drools - 流口水中的 And 子句无法正常运行
- sql-server - 在 SQL Server 2019 中使用 OPENROWSET 时出现 SQLNCLI 语法错误
- javascript - 如何使用reactjs在动态表中单击删除所有行
- jenkins - 执行特定阶段时跳过其他管道阶段
- ios - Xcode 版本 12.2 (12B45b) 不显示在调试导航器下运行 App 的 CPU 和内存利用率
- apache-spark - 从 mapr 集群读取放置在 wasb 存储下的增量文件时出现问题
- javascript - 如何添加全宽视频标签?
- c# - 为什么传递的数组不带ref,在方法内部被CopyTo更改?
- html - 如何通过添加换行符(换行符)在 Qweb 中进行循环