Я создаю приложение для просмотра фотографий, в котором используются API-интерфейсы kivy и google photos.Я использую собственный StackView на экране, чтобы перебирать альбомы, чтобы создать кнопку для каждого альбома.Я использую пользовательский класс AsyncImage, ButtonBehavior, чтобы упростить исходное изображение кнопки.У меня проблемы с попыткой вызвать текущее свойство диспетчера экрана.Я знаю, что в файле kv я могу вызвать root, или из python я могу использовать self.manager.current = ... Я не знаю, как выполнить вызов менеджера с нескольких уровней вниз.Вот соответствующий код.
Как переключить экраны с функции on_press или включения релиза ImageButton?
class AlbumScreen(Screen):
pass
class WindowManager(ScreenManager):
def switch_screen(self, screen):
self.current = screen
class AlbumStack(StackLayout):
def __init__(self, **kwargs):
super(AlbumStack, self).__init__(**kwargs)
creds = get_credentials()
svc = build_service(creds)
albums = get_albums(svc)
self.orientation = 'lr-tb'
self.spacing = 2
self.padding = 4
params = '=w200-h200-c'
try:
for album in albums:
url = parametrize_url(album['coverPhotoBaseUrl'], params)
btn = ImageButton(source=url,size=(100,100), size_hint=(None,None))
self.add_widget(btn)
except Exception as e:
print(str(e))
class ImageButton(AsyncImage, ButtonBehavior):
pass
и соответствующей части моего файла kv
<WindowManager>:
LoginScreen:
AlbumScreen:
PictureSelectorScreen:
PictureViewerScreen:
<AlbumScreen>:
name: 'AlbumScreen'
AlbumStack:
РЕДАКТИРОВАТЬ:
Я смог заставить это работать, добавив переопределение пользовательских кнопок on_release:
class ImageButton(ButtonBehavior, AsyncImage):
def on_release(self):
app = App.get_running_app()
app.root.switch_screen('PictureViewerScreen')