Связывание 'esc' в Kivy с управлением экраном осуществляется в файле kv - PullRequest
0 голосов
/ 11 ноября 2018

Я хочу связать клавишу esc, чтобы я мог переключать экраны при нажатии кнопки возврата Android. Насколько я понимаю, я выполнил управление экраном через файл kv, и это вызвало у меня проблемы с работой примеров связывания в сети (в которых используется управление, выполненное в файле py). Вот что у меня есть: weather.kv

ScreenManager:
    id: screen_manager

    SearchScreen:
        id: search_screen
        name: 'SearchScreen'
        manager: screen_manager
    ForecastScreen:
        id: forecast_screen
        name: 'ForecastScreen'
        manager: screen_manager
<SearchScreen>:

<ForecastScreen>:

Тогда в main.py

class SearchScreen(Screen):
    location = StringProperty('No location')   
    def set_location(self, address):
        self.location = str(address)
        self.manager.current = "ForecastScreen"


class ForecastScreen(Screen):
    #code

sm=Builder.load_file('weather.kv')
class WeatherApp(App):
    def build(self):
        Window.bind(on_keyboard=self.on_key)
        return sm

    def on_key(self, window, key, *args):
        if key == 27:  # the esc key
            if self.screen_manager.current_screen.name == "SearchScreen":
                return False  # exit the app from this page
            elif self.screen_manager.current_screen.name == "ForecastScreen":
                self.screen_manager.current = "SearchScreen"
                return True

if __name__ == "__main__":
    WeatherApp().run()

Дайте мне знать, если вам нужно увидеть больше моего кода. Переключение экрана на основе кнопок работает, но self.screen_manager сообщает, что screen_manager не является частью объекта self.

...