Белый экран при переходе между экранами в 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, это бесконечный цикл, и в нём все строки кода выполняются как обычные. То есть пока ваш цикл не выполнится, программа не пойдёт дальше, поэтому вы видите белый экран, я бы не рекомендовал использовать таким образом циклы, нужно делать так, чтобы это было, например, постепенно, или же как то запускать отдельный код параллельно вашему приложению. И я не знаю какая ошибка была при переносе кода, поэтому не могу ничего сказать насчёт этого.