Почему кнопка Kivy не может распространять события?

#python #kivy

#python #kivy

Вопрос:

У меня есть следующий код в приложении kivy. Я вставляю только код, связанный с кнопкой, поскольку это то, что не работает. Остальная часть кода предназначена для отображения данных списка в datagrid, который работает нормально.

 class PnLScreen(Screen):
    data = ListProperty(defaultvalue=[])
    processing = BooleanProperty(defaultvalue=False)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        tryout.get_nse_prices()
        tryout.get_bse_prices()
        tryout.get_isin_to_symbol_map()
        self.box = BoxLayout(orientation='vertical')
        button = Button(size_hint_y=None)
        button.bind(on_press=self.go_home)
        self.box.add_widget(button)

    def go_home(self,instance):
        print("called from %s" % instance.text)
        # will figure out how to go home!
  

Теперь кнопка отображается, когда экран становится текущим. Но при нажатии на кнопку связанная функция go_home никогда не вызывается. Я использую кнопки на других экранах, где это работает. Так что я не уверен, почему этого не произойдет! На самом деле я очень раздражен тем, что не могу заставить эту простую вещь работать.

Заранее спасибо

Ответ №1:

Вы добавили кнопку в boxlayout at self.box.add_widget(button) , но не добавили BoxLayout в PnLScreen. ( self.add_widget(self.box) ). Что означает, что и кнопка, и boxlayout никогда не будут отображаться. Итак, кнопка, на которую вы нажали, отличалась от той, которую вы создали в приведенном выше коде.

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

1. Спасибо. Я сделал это, то есть self.add_widget(self.box) . Кнопка отображается, но событие нажатия просто не генерируется (или не распространяется). Не уверен, как это отладить. Это работает для кнопок на главном экране (у меня два экрана).

2. Тогда я понятия не имею. Если вы опубликуете доступный для выполнения пример, который повторил проблему, я мог бы найти причину проблемы.

3. github.com/tksundar/mark2market/blob/master/PandLScreen.py

4. Извините, я не хочу отлаживать все ваше приложение. Я бы предложил использовать инспектор, чтобы выяснить, какую кнопку вы нажали. kivy.org/doc/stable/api-kivy.modules.html