Белый экран при переходе между экранами в kivy

При переходе из MenuScreen в MusScreen выходит белый экран, а должен быть список с песнями в указанном пути. Я попробовал закинуть содержимое MusScreen в MyApp, но в этом случае код выдаёт ошибку.

from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager
from kivy.uix.screenmanager import Screen
import os
from kivy.core.audio import SoundLoader
from kivymd.uix.list import OneLineListItem

screen_helper = """
ScreenManager:
    MenuScreen:
    MusScreen:
    
<MenuScreen>:
    name: 'menu'
    MDRectangleFlatButton:
        text: 'Prof'
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        on_press: root.manager.current = 'prof'
    MDIconButton:
        icon: 'image/menu.png'
        pos_hint: {'center_x': 0.9, 'center_y': 0.98}
        on_release: root.manager.current = 'prof'
<MusScreen>:
    name: 'mus'
    BoxLayout:
        orientation: "vertical"
        ScrollView:
            MDList:
                id: scroll

"""


class MenuScreen(Screen):
    pass

class MusScreen(Screen):
    def on_start(self):
        for root, dirs, files in os.walk('C:/Users/коля/PycharmProjects/ivy_test'):
            for file in files:
                if file.endswith('.mp3'):
                    required_file = file
                    the_location = os.path.abspath(os.path.join(root, required_file))
                    self.root.ids.scroll.add_widget(OneLineListItem(text=the_location, on_release=self.play_song))
                    print(required_file, the_location)

    def play_song(self, onelinelistitem):
        print('play:', onelinelistitem.text)
        the_song_path = os.path.abspath(f'{onelinelistitem.text}.mp3')
        if self.sound:
            self.sound.stop()
        self.sound = SoundLoader.load(the_song_path)
        if self.sound:
            self.sound.play()
        print(the_song_path)


sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(MusScreen(name='mus'))

class MyApp(MDApp):
    def build(self):
        scren = Builder.load_string(screen_helper)
        return scren

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

Ответы (1 шт):

Автор решения: Виктор

Вероятно все из-за цикла(это не точно) , который вы используете для обхождения файлов, так как само приложение на kivy, это бесконечный цикл, и в нём все строки кода выполняются как обычные. То есть пока ваш цикл не выполнится, программа не пойдёт дальше, поэтому вы видите белый экран, я бы не рекомендовал использовать таким образом циклы, нужно делать так, чтобы это было, например, постепенно, или же как то запускать отдельный код параллельно вашему приложению. И я не знаю какая ошибка была при переносе кода, поэтому не могу ничего сказать насчёт этого.

→ Ссылка