主要内容 #
1. 滑动条操作模块 #
以下程序完成的功能是:两个滑动条(播放进度和音量)的操作模块。
当拖动滑动条时,对应的音乐进度或者音量会被调整到对应位置上。
def change_volume(self, value): """ 修改音量 """ self.player.setVolume(value)
完成音乐文件的音量滑动条按钮操作后,还需要设计一个按钮。
将该按钮与对应的功能进行连接。
程序如下:
# 在self.init()中找到如下这部分代码 # --播放进度控制 self.play_slider = QSlider(Qt.Horizontal, self) # 播放slider # 并且在下一行增加如下这段代码 self.play_slider.sliderMoved[int].connect( lambda: self.player.setPosition( self.play_slider.value())) # 播放slider的操作处理,当拖动进度条时,播放对应位置 # 在self.init()中找到如下这部分代码 # --音量控制 self.volume_slider = QSlider(Qt.Horizontal, self) # 音量控制slider self.volume_slider.setFocusPolicy(Qt.NoFocus) # 不聚焦 # 并且在下一行增加如下这段代码 self.volume_slider.valueChanged[int].connect(self.change_volume) # 设置改变音量的代码
将以上所有代码加入到MusicPlayer类中,并且在self.init()函数中做好相应的修改。
再次运行程序,查看具体效果。
2. 播放模式切换操作模块 #
以下程序将完成音乐播放器中的最后一部分的功能:播放模式的选择。
总共有三种模式:顺序播放,单曲循环,以及随机播放。
def play_by_mode(self): """ 根据播放模式播放音乐 """ if (not self.is_pause) and (not self.is_switching): self.play_slider.setMinimum(0) # 最小值从0开始 self.play_slider.setMaximum(self.player.duration()) # 最大值为当前歌曲的长度 self.play_slider.setValue(self.play_slider.value() + 1000) self.time_slider_1.setText( time.strftime( '%M:%S', time.localtime( self.player.position() / 1000))) # 当前播放时间的数字设置 self.time_slider_2.setText( time.strftime( '%M:%S', time.localtime( self.player.duration() / 1000))) # 最大播放时间的数字设置 # 顺序播放 if (self.cmb_mode.currentIndex() == 0) and ( not self.is_pause) and (not self.is_switching): if self.qlist.count() == 0: return if self.player.position() == self.player.duration(): self.next_music() # 顺序播放的核心就是当当前播放结束时,直接跳转到下一首 # 单曲循环 elif (self.cmb_mode.currentIndex() == 1) and (not self.is_pause) and (not self.is_switching): if self.qlist.count() == 0: return if self.player.position() == self.player.duration(): # 单曲循环的核心就是当当前播放结束后,继续播放当前音乐 self.is_switching = True self.set_cur_playing() self.play_slider.setValue(0) self.play_music() self.is_switching = False # 随机播放 elif (self.cmb_mode.currentIndex() == 2) and (not self.is_pause) and (not self.is_switching): if self.qlist.count() == 0: return if self.player.position() == self.player.duration(): self.is_switching = True self.qlist.setCurrentRow( random.randint( 0, self.qlist.count() - 1)) # 随机播放的核心是当当前播放结束后,随机选择一个音乐进行播放 self.set_cur_playing() self.play_slider.setValue(0) self.play_music() self.is_switching = False
完成功能后,还需要设计一个按钮。
将该按钮与对应的功能进行连接。
程序如下:
# 在self.init()中找到如下这部分代码 # --计时器 self.timer = QTimer(self) # 设置计时器,当当前音乐播放结束之后,计时器timeout,之后根据播放模式跳到下一首 self.timer.start(1000) # 并且在下一行增加如下这段代码 self.timer.timeout.connect(self.play_by_mode) # 播放模式选择
将以上所有代码加入到MusicPlayer类中,并且在self.init()函数中做好相应的修改。
再次运行程序,查看具体效果。
3. 小结 #
- 本章完成了音乐播放器的滑动条操作模块
- 本章完成了音乐播放器的播放模式切换操作模块
习题 #
- 无