Ярлык-кнопка доступна для кликабельности вне текстуры

#python #button #kivy #label

#python #кнопка #kivy #ярлык

Вопрос:

Я создал несколько кнопок с метками. Я дал каждому из атрибутов «on_touch_up» с разными функциями. Но когда я нажимаю на одну метку, вызываются все функции. Мне кажется, что область, доступная для просмотра, больше, чем текстура фактической метки. Я попытался установить размер этих меток для разных параметров, таких как «texture_size» или «font_size», но безуспешно.

Спасибо за вашу помощь

 
<YearLabel@ButtonBehavior Label>

<YearScreen>:
    canvas.before:
        Color:
            rgba: 1,1,1,0.25
        Rectangle:
            pos: self.pos
            size: self.size


    canvas.after:
        Color:
            rgba : 0,0,0,1
        Rectangle:
            pos: 160,1565
            size: 419,60





    BoxLayout:
        id: years_layout
        orientation: "vertical"
        pos: 0,-2825
        spacing: 380

        YearLabel:
            text: "2020"
            font_size: "150sp"
            color: 1,1,1,1
            on_touch_up:
                root.to_2020()
        YearLabel:
            text: "2021"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2021()
        YearLabel:
            text: "2022"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2022()
        YearLabel:
            text: "2023"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2023()
        YearLabel:
            text: "2024"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2024()
        YearLabel:
            text: "2025"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2025()
        YearLabel:
            text: "2026"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2026()
        YearLabel:
            text: "2027"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2027()
        YearLabel:
            text: "2028"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2028()
        YearLabel:
            text: "2029"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2029()
        YearLabel:
            text: "2030"
            font_size: "150sp"
            color: 0,0,0,1
            on_touch_up:
                root.to_2030()


  

Ответ №1:

В Kivy события касания распространяются на всех дочерних элементов. Вам нужно ограничить его соответствующим виджетом, используя collide_point . Ниже приведен пример on_touch_up правильного определения функции:

             on_touch_up:
                self.collide_point(*args[1].pos) and root.to_2020()
  

Аналогично, вы можете определить для остальных меток.

Комментарии:

1. Спасибо за ваш ответ, но у меня это не сработало

2. Извините, пожалуйста, проверьте обновленный ответ. Его следует комбинировать с и, чтобы root.to_2020() функция была вложена в collide_point метод.

3. Я думал, что исправил проблему, но я этого не сделал. Ваше решение работает. Спасибо