@N3ni

Как убрать белый экран при переходе из меню в список с песнями?

При переходе из MenuScreen в MusScreen появляется белый экран, хотя в MusScreen должен быть список с песнями из пути 'C:/Users/yan/PycharmProjects/ivy_test'.
Я попробовал перекинуть код из MusScreen в MyApp, но в этом случае выходит ошибка.
Что можно сделать? Буду благодарен за помощь.

from kivymd.app import MDApp
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: 'prof'
    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/yan/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='prof'))

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

if __name__ == '__main__':
    MyApp().run()
  • Вопрос задан
  • 28 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы