首页 > 解决方案 > 如何将 on_release 操作添加到 kivy 或 kivymd、python 中的列表项?

问题描述

我想使用 kivy 制作一个音乐播放器应用程序,它是 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 循环遍历所有文件并将它们添加到滚动视图中物品)。每个列表项都应该有它自己的歌曲名称作为文本,当我们点击标签时,它将播放名称在标签上的歌曲

如果 OneLineListItem 无法执行此 on_release 操作,那么我应该在那个地方使用什么(例如 MDFlatRectangleButton 或其他任何东西)以及我应该如何使用它来使我的音乐播放器正常工作(我的意思是功能将添加播放歌曲)

标签: pythonpython-3.xkivykivy-languagekivymd

解决方案


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文件的逻辑,以及它在哪里。


推荐阅读