Python kivy 应用程序,每个屏幕都有 kv 和 py 文件
Python kivy app with kv and py files for every screen
请解释我如何在 kivy 上创建应用程序,以便每个屏幕都有单独的 py 和 kv 文件。包括从屏幕调用的屏幕。事实上,我们需要一个表单的示例应用程序:
主屏幕-> 1 屏幕-> 2 屏幕
这是一种方法:
main.py:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager
class WindowManager(ScreenManager):
pass
class TestApp(App):
def build(self):
return Builder.load_file('main.kv') # this method can be eliminated if `main.kv` is renamed to `test.kv`
if __name__ == '__main__':
TestApp().run()
main.kv:
# import the python files defining the Screens
#: import Screen1 screen1.Screen1
#: import Screen2 screen2.Screen2
# include the kv files for the other Screens
#: include screen1.kv
#: include screen2.kv
WindowManager:
Screen1:
Screen2:
screen1.py:
from kivy.uix.screenmanager import Screen
class Screen1(Screen):
pass
screen1.kv:
<Screen1>:
name: 'screen1'
BoxLayout:
Label:
text: 'Screen1'
Button:
text: 'back'
on_release: app.root.current = 'screen2'
screen2.py:
from kivy.uix.screenmanager import Screen
class Screen2(Screen):
pass
screen2.kv:
<Screen2>:
name: 'screen2'
BoxLayout:
Label:
text: 'Screen2'
Button:
text: 'back'
on_release: app.root.current = 'screen1'
当然,有不同的方法可以做到这一点。另一种方法是导入 main.py
中的所有 py
文件,然后对每个 kv
文件
使用 main.py
中的 Builder.load_file()
如果您将所有文件(main.py 除外)放在名为 subs
的子文件夹中,那么您只需更改 main.py:
class TestApp(App):
def build(self):
return Builder.load_file('subs/main.kv')
并更改为 main.kv
:
# import the python files defining the Screens
#: import Screen1 subs.screen1.Screen1
#: import Screen2 subs.screen2.Screen2
# include the kv files for the other Screens
#: include subs/screen1.kv
#: include subs/screen2.kv
WindowManager:
Screen1:
Screen2:
请解释我如何在 kivy 上创建应用程序,以便每个屏幕都有单独的 py 和 kv 文件。包括从屏幕调用的屏幕。事实上,我们需要一个表单的示例应用程序: 主屏幕-> 1 屏幕-> 2 屏幕
这是一种方法:
main.py:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager
class WindowManager(ScreenManager):
pass
class TestApp(App):
def build(self):
return Builder.load_file('main.kv') # this method can be eliminated if `main.kv` is renamed to `test.kv`
if __name__ == '__main__':
TestApp().run()
main.kv:
# import the python files defining the Screens
#: import Screen1 screen1.Screen1
#: import Screen2 screen2.Screen2
# include the kv files for the other Screens
#: include screen1.kv
#: include screen2.kv
WindowManager:
Screen1:
Screen2:
screen1.py:
from kivy.uix.screenmanager import Screen
class Screen1(Screen):
pass
screen1.kv:
<Screen1>:
name: 'screen1'
BoxLayout:
Label:
text: 'Screen1'
Button:
text: 'back'
on_release: app.root.current = 'screen2'
screen2.py:
from kivy.uix.screenmanager import Screen
class Screen2(Screen):
pass
screen2.kv:
<Screen2>:
name: 'screen2'
BoxLayout:
Label:
text: 'Screen2'
Button:
text: 'back'
on_release: app.root.current = 'screen1'
当然,有不同的方法可以做到这一点。另一种方法是导入 main.py
中的所有 py
文件,然后对每个 kv
文件
main.py
中的 Builder.load_file()
如果您将所有文件(main.py 除外)放在名为 subs
的子文件夹中,那么您只需更改 main.py:
class TestApp(App):
def build(self):
return Builder.load_file('subs/main.kv')
并更改为 main.kv
:
# import the python files defining the Screens
#: import Screen1 subs.screen1.Screen1
#: import Screen2 subs.screen2.Screen2
# include the kv files for the other Screens
#: include subs/screen1.kv
#: include subs/screen2.kv
WindowManager:
Screen1:
Screen2: