如何在缩略图库中制作可点击的 kivy 图像

Posted

技术标签:

【中文标题】如何在缩略图库中制作可点击的 kivy 图像【英文标题】:How to make a clickable kivy image in a thumbnail gallery 【发布时间】:2018-05-05 16:55:28 【问题描述】:

我正在尝试通过做有趣的事情来学习 kivy,但有点难以掌握 kivy 的做事方式。

在 Tkinter 中,我使用 forloop 创建了缩略图库并将每个单独的图像绑定到回调,它只是将单击图像的信息(路径)传递给回调以打开图像。不过我好像能理解如何在kivy中做这么简单的事情,所以需要一些帮助。

使用 Button 小部件有效;我尝试使用按钮创建一个图库并将其背景更改为图像,但图像被拉伸和扭曲(不是我想要的)。

因此,我使用 Image 小部件制作了缩略图库,并且拇指显示只是 find,但我找不到将单击的拇指信息传递给每个拇指(回调事件)的回调的方法,以按照假定的方式工作到。

我将每个拇指与 on_touch_down 属性绑定,但是当执行回调时,所有拇指信息都一键传递给回调,这不是我想要的,我只想要被点击的单个拇指的信息传递给回调。我阅读了 kivy 文档,但越来越困惑。这里的任何方式都是我的基本代码,任何帮助将不胜感激,非常感谢。

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import Image 

import glob


class Image_Gallery(GridLayout):


    def __init__(self):
        super(Image_Gallery, self).__init__()
        images = glob.glob('C:\Users\Public\Pictures\Sample Pictures\*.jpg')  # windows 7 sample pictures dir looks great
        self.cols=3
        for img in images:
            thumb = Image(source=img)
            thumb.bind(on_touch_down=self.callback)    # I tried on_touch property but does not work with images only buttons
            self.add_widget(thumb)

    def callback(self, obj, touch):
        # This should print only the clicked image source. 
        # (but instead is printing all images sources at once)
        print obj.source                



class mainApp(App):


    def build(self):
        return Image_Gallery()


if __name__ == '__main__':
    mainApp().run()

【问题讨论】:

【参考方案1】:

on_touch 事件在您应用中的所有小部件上派发事件,您必须定义自己的 Image 类并重新定义 on_touch 方法:

...
class MyImage(Image):
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            print self.source

class Image_Gallery(GridLayout):

    def __init__(self, **kwargs):
        super(Image_Gallery, self).__init__(**kwargs)
        images = glob.glob('C:\Users\Public\Pictures\Sample Pictures\*.jpg')
        self.cols = 3
        for img in images:
            thumb = MyImage(source=img)
            self.add_widget(thumb)
...

【讨论】:

反响很好。我想指出,感谢(SP SP)的回答,他让我可以理解这一点。非常感谢(SP SP)。现在为了更清楚地说明这一点。 “class MyImage(Image)”类变成了 kivy Image() 类,所以你将 source='img.jpg' 传递给这个新创建的类是有道理的。新自定义类“if self.collide_point(*touch.pos):”中的部分成为过滤器,仅过滤掉单击或选择的图像(小部件)的部分,如果不是此行,则为(SP SP ) 表示将打印所有图像(小部件)源。很棒

以上是关于如何在缩略图库中制作可点击的 kivy 图像的主要内容,如果未能解决你的问题,请参考以下文章

图像编辑后如何更新android画廊的缩略图预览

Python Kivy 从图库中选择图像

如何实现 JS,以便当我将图像悬停在图库中时,它会影响除悬停图像之外的所有其他图像?

如何获取存储在设备中的所有图像并将它们显示为 iPhone sdk 中的图库

如何使整个引导程序缩略图可点击(适用于手机和平板电脑)

如何将图像保存到图库 Android 应用程序