1

最近Kivyを使い始めましたが、問題が発生しました。URL 画像を背景としてボタン/サムネイルを作成する必要があります。ここのKivyユーザーフォーラムで助けを得ましたが、まだ少し行き詰まっています. その部分だけの私のコードは次のとおりです。

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 インスタンスをウィジェットとして扱うことは可能ですか?

4

1 に答える 1

0

サムネイルから全体画像へ

サムネイルがインスタンス化されたときに UrlBut を作成して保存するようにします。でこれを行うことができます。PILこのチュートリアルに従ってくださいhttp://andrius.miasnikovas.lt/2010/04/creating-thumbnails-from-photos-with-python-pil/

次に、on_pressフル サイズの画像を含むポップアップまたはオーバーレイを作成するメソッド (または同等のもの) を作成します。

UrlBut をウィジェットとして扱う

これを読んでください: 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)
于 2013-04-15T23:12:20.857 に答える