我最近开始与Kivy合作并遇到了问题。我需要制作一个带有URL图像作为背景的按钮/缩略图。我在Kivy用户论坛here上得到了一些帮助,但我仍然有点陷入困境。以下是我的代码:
for image_set, image_type in zip(categorized_images, image_types):
layout = GridLayout(cols=2, size_hint=(None, None))
layout.bind(minimum_height=layout.setter('height'))
scroll_view = ScrollView(size_hint=(None, None), size=(320, 200))
section = AccordionItem(title='%s' % image_type)
layout.add_widget(back_button1)
for image_path in image_set:
layout.add_widget(AsyncImage(source="http://www.example/"'%s' % image_path,\
size_hint=(None, None), size=(160, 160)))
scroll_view.add_widget(layout)
section.add_widget(scroll_view)
accordion.add_widget(section)
我现在所拥有的只是创建了一堆图像,但我需要创建缩略图才能生成完整尺寸的图像。除此之外,我还有Kivy链接中提到的builder.load_string部分和ButtonBehavior类部分。我只是不知道如何在“for循环”中实现。是否可以将UrlBut实例视为小部件?
答案 0 :(得分:0)
让UrlBut在实例化时创建并存储缩略图。您可以使用PIL
执行此操作,请按照本教程http://andrius.miasnikovas.lt/2010/04/creating-thumbnails-from-photos-with-python-pil/
然后,让on_press
方法(或等效方法)创建包含完整尺寸图像的弹出窗口或叠加层。
阅读本文:http://kivy.org/docs/api-kivy.lang.html#syntax-of-template
Kivy文档说kv文件中定义的模板可以在你的Python代码中实例化(我正在调整该链接给出的例子):
您的kv语言模板:
[UrlBut@ButtonBehavior+AsyncImage]:
source: ctx.source
button_grab: True
on_press: eval(ctx.on_press)
然后在Python中,您可以使用:
实例化模板from kivy.lang import Builder
urlbut1 = Builder.template('UrlBut',source='http://lorempixel.com/400/200')
# create a second template with a different image
urlbut2 = Builder.template('UrlBut', source='http://lorempixel.com/400/200')
# and use urlbut1 and urlbut2 as other widgets.
然后,您可以使用for循环自动执行此操作:
for image_path in image_set:
layout.add_widget(Builder.template('UrlBut',source="http://www.example/"'%s' % image_path)