【发布时间】:2019-09-25 11:07:05
【问题描述】:
我正在构建一个使用 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')
【问题讨论】:
标签: python-3.x kivy kivy-language