首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kivy动态替换kv文件并添加.widget

Kivy动态替换kv文件并添加.widget
EN

Stack Overflow用户
提问于 2020-11-29 22:21:18
回答 1查看 130关注 0票数 0

在这里,我试图根据一个名为"view“的变量来刷新屏幕。我们的目标是加载页眉和页脚以及请求的视图(页面),当我调用View('example')时,视图不会改变,但是所有的打印效果都很好。

我错过了什么?我是python和kivy的新手,所以如果有什么东西已经存在,我会接受的:)

主.py

代码语言:javascript
复制
import kivy
import runpy
import re
import pathlib
from kivy.app import App
from libraries.env import env
from App.Controllers.Controller import View

class App(App):

    route = ""
    params = {}

    def build(self):
        return View('home')

    #Parse routes.py and load the required controller
    def route(self, route, params=None):
        filepath = 'routes.py'
        controller = ""
        controllerClass = ""
        action = ""
        with open(filepath) as fp:
            for line_num, line in enumerate(fp):
                splitted = re.split('=|@', line)
                if splitted[0] == route :
                    controller = splitted[1].replace('"', '')
                    controllerClass = controller.split('/')[-1]
                    action = splitted[2].replace('"', '').replace('\n', '')
        if controller:
            runpy.run_path(controller + '.py', run_name='__index__')
        else:
            print("Le controller pour la route " + route + " est introuvable.")


if __name__ == '__main__':
    App().run()

应用程序/控制器/HomeController.py

代码语言:javascript
复制
from App.Controllers.Controller import View

class HomeController():
    
    def index(self):
        print('Controller : HomeController => index')
        return View("home")

if __name__=='__index__':
    HomeController().index()

应用程序/控制器/Controller.py

代码语言:javascript
复制
import pathlib
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

class View(BoxLayout):

    def __init__(self, view, **kwargs):
        print('View : pages/' + view + '.kv')
        super(View, self).__init__(**kwargs)
        self.clear_widgets()
        self.orientation = "vertical"
        self.add_widget(Builder.load_file("App/Views/partials/header.kv"))
        p = pathlib.Path('App/Views/pages/'+view+'.kv')
        if p.is_file():
            self.add_widget(Builder.load_file("App/Views/pages/"+view+".kv"))
            print("Chargement de la vue ok.")
        else:
            print("La vue " + view + " est introuvable.")
        self.add_widget(Builder.load_file("App/Views/partials/footer.kv"))

在全球范围内,我正在尝试学习python (我来自PHP)。我通过制作一个小的自制框架进行训练。这里提供了正在进行的工作:https://github.com/mchev/Larathon

EN

Stack Overflow用户

发布于 2020-11-29 22:26:24

当我调用

(‘example’)时,视图不会改变,但所有的打印效果都很好。

这是因为这会实例化一个新的View,但不会对它做任何事情,所以您的代码会运行,但您不会在任何地方显示结果。

假设您打算在现有的视图上运行一些代码,而不是像这样的新视图。如果你不知道如何去做,那就发布一个最小的可运行的例子来演示这个问题。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65061110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档