Это просто создается методом проб и ошибок, поэтому оно не может быть универсально правильным. Но вот попытка сделать то, что вы хотите:
class TouchPoint(Image):
def on_touch_down(self, touch):
if not self.load_image.collide_point(*touch.pos):
return False
else:
# coordinates of image lower left corner inside the TouchPoint widget
im_x = (self.size[0] - self.norm_image_size[0]) / 2.0 + self.x
im_y = (self.size[1] - self.norm_image_size[1]) / 2.0 + self.y
# touch coordinates relative to image location
im_touch_x = touch.x - im_x
im_touch_y = touch.y - im_y
# check if touch is with the actual image
if im_touch_x < 0 or im_touch_x > self.norm_image_size[0]:
print('Missed')
elif im_touch_y < 0 or im_touch_y > self.norm_image_size[1]:
print('Missed')
else:
print('image touch coords:', im_touch_x, im_touch_y)
norm_image_size
- это фактический размер изображения в TouchPoint
. Этот код предполагает, что изображение будет отцентрировано в виджете TouchPoint
. Никаких гарантий, но это может дать вам отправную точку.