为什么函数是在整个版面上触发,而不是只在图片上触发?

问题描述 投票:0回答:1

我想让类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()
python kivy touch
1个回答
1
投票

on_touch_down 方法属于Kivy的 Widget 而你不应该阻止它的执行。但你可以做的是修改你自己的版本,以满足你的需求,像这样。

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

有了这个,你只打印一些东西 如果点击是在你的图像的边界内。

© www.soinside.com 2019 - 2024. All rights reserved.