如何在缩略图库中制作可点击的 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 图像的主要内容,如果未能解决你的问题,请参考以下文章
如何实现 JS,以便当我将图像悬停在图库中时,它会影响除悬停图像之外的所有其他图像?