Python 如何在缩略图库中制作可点击的kivy图像
我试图通过做有趣的事情来学习kivy,但是很难掌握kivy做事的方式 在Tkinter中,我创建了带有forloop的缩略图库,并将每个图像绑定到回调,它只是将单击图像的信息(路径)传递到回调以打开图像。但我似乎能理解如何在kivy中做这么简单的事情,所以我需要一些帮助 使用按钮小部件工作;我尝试创建一个带有按钮的图库,并将其背景更改为图像,但图像会被拉伸和扭曲(这不是我想要的) 因此,我用图像小部件制作了缩略图库,显示的拇指只是find,但我找不到一种方法将单击的拇指信息传递给每个拇指的回调(回调事件),以便按照预期的方式工作 我用on_touch_down属性绑定每个拇指,但在执行回调时,所有拇指信息都会在一次单击中传递到回调,这不是我想要的,我只希望被单击的单个拇指的信息传递到回调。我读了kivy文档,但越来越困惑。这是我的基本代码,任何帮助都将不胜感激。谢谢Python 如何在缩略图库中制作可点击的kivy图像,python,image,kivy,bind,Python,Image,Kivy,Bind,我试图通过做有趣的事情来学习kivy,但是很难掌握kivy做事的方式 在Tkinter中,我创建了带有forloop的缩略图库,并将每个图像绑定到回调,它只是将单击图像的信息(路径)传递到回调以打开图像。但我似乎能理解如何在kivy中做这么简单的事情,所以我需要一些帮助 使用按钮小部件工作;我尝试创建一个带有按钮的图库,并将其背景更改为图像,但图像会被拉伸和扭曲(这不是我想要的) 因此,我用图像小部件制作了缩略图库,显示的拇指只是find,但我找不到一种方法将单击的拇指信息传递给每个拇指的回调(
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()
on_touch事件在应用程序中的所有小部件上显示事件,您必须定义自己的图像类并重新定义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)。现在为了更清楚地说明这一点。类“class MyImage(Image)”变成了kivy Image()类,因此您可以将source='img.jpg'传递给这个新创建的类。新自定义类“if self.collide_point(*touch.pos):”中的部分将成为过滤器,该部分仅过滤单击或选择的图像(小部件),如果不用于此行,则(SP)将打印所有图像(小部件)源。伟大的