-
StackOverflow 文件
-
kivy 教程
-
使用螢幕管理器
-
簡單的螢幕管理器用法
# A line used mostly as the first one, imports App class
# that is used to get a window and launch the application
from kivy.app import App
# Casual Kivy widgets that reside in kivy.uix
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.screenmanager import SlideTransition
# Inherit Screen class and make it look like
# a simple page with navigation
class CustomScreen(Screen):
# It's necessary to initialize a widget the class inherits
# from to access its methods such as 'add_widget' with 'super()'
def __init__(self, **kwargs):
# Py2/Py3 note: although in Py3 'super()' is simplified
# it's a good practice to use Py2 syntax, so that the
# code is compatibile in both versions
super(CustomScreen, self).__init__(**kwargs)
# Put a layout in the Screen which will take
# Screen's size and pos.
# The 'orientation' represents a direction
# in which the widgets are added into the
# BoxLayout - 'horizontal' is the default
layout = BoxLayout(orientation='vertical')
# Add a Label with the name of Screen
# and set its size to 50px
layout.add_widget(Label(text=self.name, font_size=50))
# Add another layout to handle the navigation
# and set the height of navigation to 20%
# of the CustomScreen
navig = BoxLayout(size_hint_y=0.2)
# Create buttons with a custom text
prev = Button(text='Previous')
next = Button(text='Next')
# Bind to 'on_release' events of Buttons
prev.bind(on_release=self.switch_prev)
next.bind(on_release=self.switch_next)
# Add buttons to navigation
# and the navigation to layout
navig.add_widget(prev)
navig.add_widget(next)
layout.add_widget(navig)
# And add the layout to the Screen
self.add_widget(layout)
# *args is used to catch arguments that are returned
# when 'on_release' event is dispatched
def switch_prev(self, *args):
# 'self.manager' holds a reference to ScreenManager object
# and 'ScreenManager.current' is a name of a visible Screen
# Methods 'ScreenManager.previous()' and 'ScreenManager.next()'
# return a string of a previous/next Screen's name
self.manager.transition = SlideTransition(direction="right")
self.manager.current = self.manager.previous()
def switch_next(self, *args):
self.manager.transition = SlideTransition(direction="right")
self.manager.current = self.manager.next()
class ScreenManagerApp(App):
# 'build' is a method of App used in the framework it's
# expected that the method returns an object of a Kivy widget
def build(self):
# Get an object of some widget that will be the core
# of the application - in this case ScreenManager
root = ScreenManager()
# Add 4 CustomScreens with name 'Screen <order>`
for x in range(4):
root.add_widget(CustomScreen(name='Screen %d' % x))
# Return the object
return root
# This is only a protection, so that if the file
# is imported it won't try to launch another App
if __name__ == '__main__':
# And run the App with its method 'run'
ScreenManagerApp().run()