Вопрос о событиях диспетчерского поведения в кивах - PullRequest
0 голосов
/ 01 января 2019

У меня есть тестовые фрагменты Python:

py файл:

from kivy.app import App
class tutorApp(App):

    def bn_pressed(self,button):
        print(button.text)
        return True

app = tutorApp()
app.load_kv('tutorial-3.kv')
app.run()

и файл kv (tutorial-3.kv):

<Tb@Button>:
    on_touch_down:app.bn_pressed(self)


BoxLayout:
    Tb:
        text:'button1'
    Tb:
        text:'button2'
    Tb: 
        text:'button3'

Когда янажал те три кнопки слева направо, я получил:

# press left
button3
button2
button1
# press middle
button3
button2
# press right
button3

, и я изменил строку:

<Tb@Button>

на

<Tb@Lable>

и нажалснова я получил:

# press left label
button3
button2
button1
# press middle label
button3
button2
button1
# press right label
button3
button2
button1

в чем причина этих различий?Предполагается остановить распространение события, когда я возвращаю True в event_handler, почему его продолжают вызывать?

Спасибо за любую помощь.

Кстати.Если я изменяю событие на on_press, все просто отлично, правильный обработчик и только правильный дескриптор вызывается при нажатии любой из трех кнопок.

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Это метод on_touch_down, который должен возвращать True, чтобы остановить распространение.on_touch_down:, который вы используете в kv, не заменяет этот метод или любой другой код на python, а вместо этого просто присоединяется к событию on_touch_down.Это означает, что вы можете, например, написать on_touch_down: более одного раза в одном и том же правиле kv, и все привязки будут работать.

0 голосов
/ 01 января 2019

В документации на этикетке указано, что распространение будет остановлено, если будет возвращено значение True.Я предлагаю отчет об ошибке.Я вижу то же самое, что вы делаете с этим примером.

https://kivy.org/doc/stable/api-kivy.uix.label.html

on_touch_down (touch)

bool Если значение True, отправка события касания остановится.Если значение False, событие будет по-прежнему отправляться на остальную часть дерева виджетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...