【问题标题】:how to use slider as progress bar and control audio in kivy python?如何在kivy python中使用滑块作为进度条并控制音频?
【发布时间】:2021-01-01 01:53:19
【问题描述】:

我正在为 android 制作音乐播放器,现在我可以成功播放和暂停歌曲,但
问题是,与 Spotify 或 Google Play Music 等其他音乐播放器应用程序一样,我们有一个滑块 在底部,我们可以使用该滑块来控制当前正在播放的歌曲
所以关键是想要做同样的事情,我想添加一个滑块,它也可以像 a
进度条 我们可以使用那个进度条来控制歌曲播放我试过这个并最终得到这个代码 - :

from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivymd.uix.slider import MDSlider


class MusicApp(MDApp):

   def build(self):

          a = mixer.Sound(filename)
         
          slider = MDSlider(min=0,max=total_length,value = 0, 
                            pos_hint={'center_x':0.50,'center_y':0.6},  
                            size_hint=(0.6,0.1))

           screen = Screen()

           screen.add_widget(slider)
           return screen

MusicApp().run()

谁能帮我解决这个问题

提前致谢????????

【问题讨论】:

    标签: python python-3.x kivy kivy-language android-music-player


    【解决方案1】:

    您可以将滑块用作进度条和控制器。这是一些代码(基于您的代码):

    from kivy.clock import Clock
    from kivy.core.audio import SoundLoader
    from kivy.properties import ObjectProperty
    from kivymd.app import MDApp
    from kivymd.uix.screen import Screen
    from kivymd.uix.slider import MDSlider
    
    
    class MySlider(MDSlider):
        sound = ObjectProperty(None)
    
        def on_touch_up(self, touch):
            if touch.grab_current == self:
                # call super method and save its return
                ret_val = super(MySlider, self).on_touch_up(touch)
    
                # adjust position of sound
                self.sound.seek(self.max * self.value_normalized)
    
                # if sound is stopped, restart it
                if self.sound.state == 'stop':
                    MDApp.get_running_app().start_play()
    
                # return the saved return value
                return ret_val
            else:
                return super(MySlider, self).on_touch_up(touch)
    
    
    class MusicApp(MDApp):
    
        def build(self):
            self.a = SoundLoader.load('test.mp3')
    
            # create slider and pass the sound to it
            self.slider = MySlider(min=0, max=self.a.length, value=0, sound=self.a,
                              pos_hint={'center_x': 0.50, 'center_y': 0.6},
                              size_hint=(0.6, 0.1))
    
            screen = Screen()
    
            screen.add_widget(self.slider)
    
            self.updater = None
    
            # start the sound
            self.start_play()
    
            return screen
    
        def start_play(self, *args):
            # play the sound
            self.a.play()
    
            if self.updater is None:
                # schedule updates to the slider
                self.updater = Clock.schedule_interval(self.update_slider, 0.5)
    
        def update_slider(self, dt):
            # update slider
            self.slider.value = self.a.get_pos()
    
            # if the sound has finished, stop the updating
            if self.a.state == 'stop':
                self.updater.cancel()
                self.updater = None
    
    
    MusicApp().run()
    

    MySlider 类扩展 MDSlider 并覆盖其 on_touch_up() 方法来调整声音位置。它也是通过预定的update_slider()方法更新的。

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多