#python #python-3.x #kivy #kivy-language #kivymd
#python #python-3.x #kivy #kivy-language #kivymd
Вопрос:
Я хочу создать приложение для музыкального проигрывателя с использованием kivy и его material design на python. Мне удалось найти файлы .mp3 и воспроизвести их, но проблема в том, что я не могу найти способ привязать OneLineListItem к какой-либо функции (например. Если мы щелкнем и отпустим элемент списка, я хочу заставить python воспроизводить эту песню) мой код -:
from kivy.lang import Builder
from kivymd.uix.list import OneLineListItem
from kivymd.app import MDApp
import os
helper_string = """
Screen:
BoxLayout:
orientation: "vertical"
ScrollView:
MDList:
id: scroll
"""
class MainApp(MDApp):
def build(self):
screen = Builder.load_string(helper_string)
return screen
def on_start(self):
for root, dirs, files in os.walk('C:/'):
for file in files:
if file.endswith('.mp3'):
required_file = file
the_location = os.path.abspath(required_file)
location_list = list(the_location)
song_name = list(required_file)
self.root.ids.scroll.add_widget(OneLineListItem(text=required_file))
# print(required_file)
MainApp().run()
Вы можете видеть, что в этом коде цикл for перебирает все файлы и добавляет их в режиме прокрутки
Я хочу создать этот цикл for, чтобы добавить действие on_release к элементу списка, который воспроизводит песню (название песни указано в элементе списка). И каждый элемент списка должен иметь собственное название песни в виде текста, и когда мы нажимаем на ярлык, он воспроизводит песню, название которой указано на ярлыкеИ если это действие on_release невозможно с OneLineListItem, то что я должен использовать в этом месте (например. MDFlatRectangleButton или что-нибудь еще), а также как я должен использовать его, чтобы мой музыкальный проигрыватель работал нормально (я имею в виду, что будет добавлена функциональность воспроизведения песни)
Ответ №1:
on_release
Действие возможно, потому что OneLineListItem
наследуется ButtonBehavior
. Итак, вам просто нужно указать его, вот так:
self.root.ids.scroll.add_widget(OneLineListItem(text=required_file, on_release=self.play_song))
Затем в вашем App
добавьте play_song()
метод:
def play_song(self, onelinelistitem):
print('play:', onelinelistitem.text)
Конечно, вам нужно будет добавить логику того, как воспроизводить mp3
файл и где он находится.
Комментарии:
1. Это сработало, но теперь я применил эту логику для воспроизведения песни, и это выдало мне эту ошибку [ОШИБКА] [AudioGstplayer] b’Resource не найден.’ [ОШИБКА] [AudioGstplayer] ошибка b’GStreamer: не удалось изменить состояние, и какой-то элемент не смог опубликовать правильное сообщение об ошибке с указанием причины сбоя.’ [ОШИБКА] [AudioGstplayer] b’Resource не найден.’ [ОШИБКА] [AudioGstplayer] b Ошибка GStreamer: не удалось изменить состояние, и какой-либо элемент не смог опубликовать правильное сообщение об ошибке с указанием причины сбоя
2. определить play_song(self, onelinelistitem): # print(‘play:’, onelinelistitem.text) the_song_path = os.path.abspath(onelinelistitem.text) звук = SoundLoader.load(the_song_path) если звук: sound.play() печать(the_song_path)
3.
onelinelistitem.text
Это просто имя файла песни иos.path.abspath(onelinelistitem.text)
не будет указывать полный путь к файлу. Вам нужно найти способ указать полный путь к файлу (возможно, добавить свойство кonelinelistitem
).