【问题标题】:Looking for a good way to organize big kivy project寻找组织大型kivy项目的好方法
【发布时间】:2014-06-26 20:14:27
【问题描述】:

我是 kivy 的新手,我想知道如何在单独的目录中使用应用程序的某些部分。我想轻松重用代码并在项目中有良好的组织。我不喜欢像在许多教程中显示的那样将所有东西都放入一个模块中,所以也许有任何方法可以将小部件放入模块中。 例如:

-main:
    -modules/
       -login/
          -main.py
          -main.kv
       -other/
          -ohter.kv
          -other.kv
    -main.py #<- here I want to put widgets from 'login' and 'other'
    -main.kv

【问题讨论】:

    标签: python oop kivy


    【解决方案1】:

    我通常将每个小部件完全放在一个文件中:

    from kivy.uix.boxlayout import BoxLayout
    from kivy.lang import Builder
    
    Builder.load_string('''
    <LoginMain>:
        Label:
            text: 'hi'
        Button:
            text: 'press me'
    ''')
    
    class LoginMain(BoxLayout):
        ...
    

    然后您只需要使用Factory 告诉 Kivy 在哪里可以找到每个小部件。这是在您的应用程序的构建方法中最容易做到的:

    class MyApp(App):
        def build(self):
            Factory.register('LoginMain', module='myapp.modules.login.main')
            Factory.register('Other', module='myapp.modules.other.other')
            return Factory.LoginMain()
    

    【讨论】:

    • 我认为通过普通的 python 导入来访问小部件会更简洁,因为它(在实践中)工作方式完全相同,但不使用新的工具集。
    • 我喜欢工厂注册的方式,但我认为正确的答案是 Builder,因为我可以从任何位置创建或导入 kv,所以我的结构可以以正确的方式组织
    • @inclement 我演示了 Factory.register() 的使用,因为它明确地使小部件在 kv 中可用,而不是导入模块的副作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2011-08-03
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多