Класс Kivy в .py и .kv взаимодействии

Я не совсем понимаю, как взаимодействуют классы в файле python и киви. В настоящее время я изменяю пример Витрины Kivy, чтобы увеличить свое понимание.

Файловая структура

  • main.py
  • showcase.kv
  • Данные / экраны / test.kv

main.py

class Testy(BoxLayout): ttext = 'Bla' #other code class ShowcaseScreen(Screen): fullscreen = BooleanProperty(False) def add_widget(self, *args): if 'content' in self.ids: return self.ids.content.add_widget(*args) return super(ShowcaseScreen, self).add_widget(*args) class ShowcaseApp(App): #code 

test.kv

 <Testy>: orientation: 'vertical' Label: text: root.ttext ShowcaseScreen: name: 'LearnKanji' fullscreen: True #Some ref to <Testy> 

Вопрос

Я хочу иметь свой код в Testy (), потому что я планирую написать много кода, нацеленного на то, что происходит на этом одном экране, и я не хочу помешать ShowcaseScreen (), потому что ShowcaseScreen также предназначен для других экранов ,

Чтобы уточнить, в test.kv Я имею в виду переменную ttext. Если бы я не сделал класс Testy (), я бы сказал следующее:

 ShowcaseScreen: name: 'LearnKanji' fullscreen: True BoxLayout: text: root.ttext 

И затем в main.py мне нужно будет поставить

 class ShowcaseScreen(Screen): ttext = 'Bla' 

Однако, поскольку многие экраны, кроме Testy, используют класс ShowcaseScreen (), поэтому весь код для всех экранов здесь будет слишком большим. Поэтому я хочу, чтобы код на экран в отдельном классе. Я думаю, что это лучший способ для более крупных проектов кода.

Итак, как я могу ссылаться после вызова ShowcaseScreen: в файле test.kv? Так что я могу поместить код для Testy в Testy () и сохранить мои файлы и классы более организованными.

Следующий вопрос: класс Киви в .py и .kv взаимодействии 2

One Solution collect form web for “Класс Kivy в .py и .kv взаимодействии”

Вы можете использовать ScreenManager . Посмотрите здесь, я изменил часть вашего кода, чтобы предоставить пример использования ScreenManager для разделения кода для каждого экрана на свои собственные классы. Если есть проблемы с этим, дайте мне знать.

main.py :

 from kivy.app import App from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition from kivy.properties import ObjectProperty class Testy(Screen): ttext = 'Screen 2' #other code class ScreenTwo(Screen): pass class Manager(ScreenManager): testy = ObjectProperty(None) screen_2 = ObjectProperty(None) class ShowcaseApp(App): def build(self): return Manager(transition=FadeTransition()) if __name__ == "__main__": ShowcaseApp().run() 

kv файл:

 <Testy>: BoxLayout: Button: text: root.ttext on_press: root.manager.current = "screen_two" <ScreenTwo>: BoxLayout: Button: text: "Screen 1" on_press: root.manager.current = "testy_screen" <Manager>: id: screen_manager testy: testy screen_2: screen_2 Testy: id: testy name: 'testy_screen' manager: screen_manager ScreenTwo: id: screen_2 name: 'screen_two' manager: screen_manager 
  • Kivy: проверьте, включена ли функция
  • Лучший графический интерфейс для python?
  • Обновить текст ярлыка при нажатии кнопки в Kivy для Python
  • Как имитировать терминал в Android с помощью Kivy?
  • Сохранить аудиофайлы KIVY, PYTHON
  • Это ошибка в Киви? DropDown + ScreenManager не работает должным образом
  • Python - Kivy - Builtdozer: нажатие кнопки на клавиатуре Android
  • Kivy: изменение экранов в экранном менеджере с событием on_press
  • Python - лучший язык программирования в мире.