我正在构建一个使用kivy和google photos api的照片查看应用程序。我在屏幕中使用自定义StackView来遍历相册,以为每个相册创建一个按钮。我正在使用自定义的AsyncImage ButtonBehavior类来简化按钮的源图像。我在尝试调用屏幕管理器的当前属性时遇到问题。我知道在kv文件中可以调用root,也可以在python中使用self.manager.current = ...我不确定如何从几个级别调用管理器。这是相关的代码。
如何从ImageButton的on_press或on release功能切换屏幕?
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')
答案 0 :(得分:0)
您只需在kvlang中引用应用小部件即可。
假设您的WindowManager是根窗口小部件,即
class MyApp(App):
def build(self):
return WindowManager()
您可以直接在.kv文件内部切换屏幕(并指定过渡方向):
....
ImageButton:
on_release:
app.root.current = 'PictureViewerScreen'
app.root.transition.direction = 'right'
....