使用Kivy的异步图像滚动网格



我正在尝试创建一个Kivy布局,在滚动视图中加载AsyncImage元素的网格。

我试过使用几个不同的元素组合,但都没有成功。

我最接近的尝试是将GridLayout放入ScrollView中,然后将AsyncImages添加到GridLayout中,但是元素之间存在巨大的间隙,我无法一次查看多个列。

对此提供任何帮助将不胜感激。谢谢你。

这是一个你想做的例子,

它将所有图像加载到gridlayout的路径中,然后将gridlayout添加到ScrollView中。

main.py

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from os import listdir, path
from os.path import isfile, join
from kivy.uix.image import AsyncImage
from kivy.uix.widget import Widget

class RMassets(Widget):
def __init__(self, **kwargs):
super(RMassets,self).__init__(**kwargs)
def doit(self):
self.C_L = GridLayout(cols = 3, spacing = 0, size_hint = (None, None), size = (Window.size[0]/2, Window.size[1]),pos = (0,0))
self.C_L.bind(minimum_height = self.C_L.setter('height'))
mypath = "./Images/"
#Getting All Images Names from path
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
#Adding All images to GridLayout
for j in range(len(onlyfiles)):
fname = mypath + onlyfiles[j]
img = AsyncImage(source = fname, keep_ratio = True, allow_stretch =True)
img.size_hint_y = None
self.C_L.add_widget(img)
#Adding GridLayout to ScrollView
self.ids.SV1.add_widget(self.C_L)
self.ids.ad.text = "Done"
self.ids.ad.disabled = True
class myApp(App):
pass
myApp().run()

这是我的kv文件

my.kv

RMassets:
<RMassets>:
BoxLayout:
orientation: "horizontal"
size_hint: None, None
size: (root.size[0], root.size[1])
ScrollView:
id: SV1
do_scroll_x: False
do_scroll_y: True

Button:
id:ad
text:"Add Images"
on_press: root.doit()

最新更新