gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:22:52 25 4
gpt4 key购买 nike

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

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

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

所以我用图像小部件制作了缩略图库,并且只是找到了显示的缩略图,但是我找不到一种方法将点击的缩略图信息传递给每个缩略图(回调事件)的回调以按照预期的方式工作到。

我将每个拇指与 on_touch_down 属性绑定(bind),但是当执行回调时,所有拇指信息都通过一次点击传递给回调,这不是我想要的,我只想要被点击的单个拇指的信息传递给回调。我阅读了 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()

最佳答案

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)
...

关于python - 如何在缩略图库中制作可点击的 kivy 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47426455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com