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



我希望 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方法属于 KivyWidget,您不应该阻止它的执行。
不过,您可以做的是修改自己的版本,以满足您的需求,如下所示:

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

这样,只有当单击在图像边界内时,您才能打印某些内容。

相关内容

最新更新