为什么该功能会在整个布局上触发,而不仅仅是在图像上触发?

Why is the function triggered on the entire layout and not only on the image?

我希望 class myField() 中的函数 on_touch_down() 仅通过单击图像而不是整个屏幕来调用。我必须改变什么才能实现这一目标?

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image


class MyField(Image):

    def __init__(self, **kwargs):
        super(MyField, self).__init__(**kwargs)
        self.source = "image1.jpg"
        self.size_hint = 0.1,0.1

    def on_touch_down(self, touch):
        print("touch down")


class MyLayout(FloatLayout):

    def __init__(self, **kwargs):
        super(MyLayout, self).__init__(**kwargs)
        self.add_widget(MyField())


class MyApp(App):
    def build(self):
        return MyLayout()


if __name__ == "__main__":
    MyApp().run()

on_touch_down 方法属于 Kivy 的 Widget,您不应阻止其执行。
不过,您可以做的是修改您自己的版本,以满足您的需要,例如:

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            print("touch down")

有了这个,只有当点击在图像边界内时,你才会打印一些东西。