嗨,我正在尝试在 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"
蟒蛇:
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。
答案 0 :(得分:0)
您应该可以使用 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
答案 1 :(得分:0)
以下是您的应用“仅用于切换屏幕”的外观示例。
from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
class FirstPage(MDFloatLayout):
def switch_screen(self):
myapp.screen_manager.transition = SlideTransition(direction='left', duration=.25)
myapp.screen_manager.current = 'SecondPage'
class SecondPage(MDFloatLayout):
def switch_back(self):
myapp.screen_manager.transition = SlideTransition(direction='right', duration=.25)
myapp.screen_manager.current = 'FirstPage'
class MyApp(MDApp):
def build(self):
self.screen_manager = ScreenManager()
self.firstpage = FirstPage()
screen = Screen(name='FirstPage')
screen.add_widget(self.firstpage)
self.screen_manager.add_widget(screen)
self.secondpage = SecondPage()
screen = Screen(name='SecondPage')
screen.add_widget(self.secondpage)
self.screen_manager.add_widget(screen)
return self.screen_manager
myapp = MyApp()
myapp.run()
kivy
代码:
FirstPage:
<FirstPage>:
Button:
text: "First"
on_release: root.switch_screen()
<SecondPage>:
Button:
text: "Second"
on_release: root.switch_back()