Получить координату пикселя изображения в виджете, используя сенсорное событие - PullRequest
0 голосов
/ 21 июня 2019

Мой код в классе Touchpoint пытается распечатать координаты x, y изображения в виджете.Однако этот код дает координаты относительно окна, а не только изображение

Я пытался использовать метод collide_point

Snippets - py

class TouchPoint(Image):
    def on_touch_down(self, touch):
        if not self.load_image.collide_point(*touch.pos):
            return False
        else:print(touch)

Snippets - kv file

                TouchPoint:
                    load_image:load_image
                    size_hint: 1,.78
                    pos_hint: {"top": .75, "left":1}
                    id: load_image
                    source: 'test_pics/image.png'

1 Ответ

0 голосов
/ 22 июня 2019

Это просто создается методом проб и ошибок, поэтому оно не может быть универсально правильным. Но вот попытка сделать то, что вы хотите:

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. Никаких гарантий, но это может дать вам отправную точку.

...