kivy如何切换屏幕?
Posted
技术标签:
【中文标题】kivy如何切换屏幕?【英文标题】:How to switch screen with kivy? 【发布时间】:2021-10-06 19:59:27 【问题描述】:您好,我正在尝试在 kivy 中切换屏幕,但它在这里不起作用,我认为这是必要的代码: .KV:
WindowManager:
MainScreen:
FileScreen:
<MainScreen>:
name: "MainScreen"
MDFloatingActionButtonSpeedDial:
bg_hint_color: app.theme_cls.primary_light
data: app.data
root_button_anim: True
callback: app.btn
<FileScreen>:
name: "FileScreen"
MDBoxLayout:
MDLabel:
text: "test"
Python:
class MainScreen(Screen):
def switch(self):
self.current = "FileScreen"
class FileScreen(Screen):
pass
class WindowManager(ScreenManager):
pass
class app(MDApp):
data =
'Create': 'file-document',
'Open': 'folder-open'
def btn(self, instance):
print('callback')
icon = instance.icon
# if you want check button, use
if isinstance(instance, MDFloatingBottomButton):
if icon == 'file-document':
print('Create')
MainScreen.switch(self)
elif icon == 'folder-open':
print('Open')
我真的不知道在这个 kivy 领域该做什么,所以希望社区可以帮助我。 如果您想知道,我也在使用 KivyMD。
【问题讨论】:
这实际上并不是 Kivy 特有的任何东西,而是一个普遍的 Python 错误:你调用MainScreen.switch(self)
所以 self
是你的 app
类实例,所以你实际上在做的是等价的到app.current = "FileScreen"
这显然没有做任何事情。您需要调用您在 gui 中显示的 MainScreen
类的 instance 的 switch
方法。
我不知道你是怎么做到的,因为我对 python @inclement 还很陌生
这个问题很快就会被关闭,因为它是answered
【参考方案1】:
您应该可以使用ScreenManager
来完成此操作。所以你的代码看起来像这样:
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
class MainScreen(Screen):
def switch_button(self):
app.screen_manager.transition = SlideTransition(direction='left', duration=.25) #this is speed of transition between screens. if you remove this, kivy will set it to default. And you can change direction too
app.screen_manager.current = 'FileScreen'
class FileScreen(Screen):
pass
class app(MDApp):
def build(self):
self.screen_manager = ScreenManager()
self.mainscreen = MainScreen()
screen = Screen(name='MainScreen')
screen.add_widget(self.mainscreen)
self.screen_manager.add_widget(screen)
self.filescreen = FileScreen()
screen = Screen(name='FileScreen')
screen.add_widget(self.filescreen)
self.screen_manager.add_widget(screen)
return self.screen_manager
您的kivy
代码应如下所示:
<MainScreen>:
name: "MainScreen"
MDFloatingActionButtonSpeedDial:
bg_hint_color: app.theme_cls.primary_light
data: app.data
root_button_anim: True
callback: app.btn
on_release: root.switch_button()
<FileScreen>:
name: "FileScreen"
MDBoxLayout:
MDLabel:
text: "test"
如果你想要更好的解释点击here
【讨论】:
Supatashavili 它在这里不起作用的是当前代码:pastebin.com/hUkBJRph 不,只是白屏。 @Gurami Supatashvili以上是关于kivy如何切换屏幕?的主要内容,如果未能解决你的问题,请参考以下文章