Я написал приложение Python Kivy для отображения измерений.В поисках вещей на kivy я наткнулся на проект kivy-md (Material Design for kivy).Я считаю, что интерфейс очень хорошо выглядит.Вот почему я хочу внедрить свое приложение в экран проекта kivy-md.
Мой проект находится в папке kivy-playground
, которая содержит kivymd
файлы в папке kivymd
, main.py
(для запуска приложения kivy md), файл main.kv
(для макета приложения kivy md) и playground.py
, который содержит приложение kivy для отображения измерений.Я использую Python 3.7 с последней версией kivy.
Цель : я хочу добавить представление приложения из playground.py
в основное приложение, которое запускается main.py
так, что вид playground.py
отображается на экране page2
(см. main.kv
) основного приложения.Я полностью потерян, как этого можно достичь, и я был бы рад, если бы кто-нибудь показал мне на этом игрушечном примере, как этого можно достичь.Не обязательно важно, чтобы playground.py
оставался как есть.Если проблему можно решить с помощью небольших изменений в файле playground.py
, то это также будет правильным решением.
Я попытался создать минимальный рабочий пример.Вот файлы
# main.py
# -*- coding: utf-8 -*-
import os
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
from kivymd.theming import ThemeManager
class MainApp(App):
theme_cls = ThemeManager()
def __init__(self, **kwargs):
super(MainApp, self).__init__(**kwargs)
Window.bind(on_close=self.on_stop)
def build(self):
main_widget = Builder.load_file(
os.path.join(os.path.dirname(__file__), "./main.kv")
)
self.theme_cls.theme_style = 'Dark'
return main_widget
def close_app(self, *largs):
super(MainApp, self).stop(*largs)
def on_pause(self):
return True
if __name__ == '__main__':
MainApp().run()
здесь main.kv
# main.kv
#:kivy 1.10.1
#:import Toolbar kivymd.toolbar.Toolbar
#:import MDNavigationDrawer kivymd.navigationdrawer.MDNavigationDrawer
#:import NavigationLayout kivymd.navigationdrawer.NavigationLayout
#:import NavigationDrawerToolbar kivymd.navigationdrawer.NavigationDrawerToolbar
NavigationLayout:
id: nav_layout
MDNavigationDrawer:
id: nav_drawer
NavigationDrawerToolbar:
NavigationDrawerIconButton:
icon: 'checkbox-blank-circle'
text: "Page1"
on_release: app.root.ids.scr_mngr.current = 'page1'
NavigationDrawerIconButton:
icon: 'checkbox-blank-circle'
text: "Page2"
on_release: app.root.ids.scr_mngr.current = 'page2'
BoxLayout:
orientation: 'vertical'
halign: "center"
Toolbar:
id: toolbar
md_bg_color: app.theme_cls.primary_color
background_palette: 'Primary'
background_hue: '500'
right_action_items: [['dots-vertical', lambda x: app.root.toggle_nav_drawer()]]
ScreenManager:
id: scr_mngr
Screen:
name: 'page1'
Label:
text: "page1"
Screen:
name: 'page2'
Label:
text: "Page 2"
, а вот playground.py
, которые я хочу вставить на экран page2
основного приложения.
from kivy.app import App
from kivy.uix.label import Label
class Playground(App):
def build(self):
hello_world_label = Label(text="Hello World!")
return hello_world_label
if __name__ == "__main__":
Playground().run()