#python #oop #kivy
#python #ооп #kivy
Вопрос:
Я новичок в 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
Ответ №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):
...
Затем вам просто нужно сообщить Kivy, где найти каждый виджет, используя Factory
. Это проще всего сделать в методе сборки вашего приложения:
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()
Комментарии:
1. Я думаю, что удобнее получать доступ к виджетам через обычный импорт python, поскольку это работает (на практике) точно так же, но не использует новый набор инструментов.
2. Мне нравится способ регистрации на заводе, но я думаю, что правильный ответ — Builder, потому что я могу создавать или импортировать kv из любого места, поэтому моя структура может быть организована правильно
3. @inclument Я продемонстрировал
Factory.register()
использование вместо этого, поскольку это явно делает виджет доступным в kv, а не является побочным эффектом импорта модуля.