#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