主要内容 #
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. 小结 #
- 本章完成了音乐播放器的滑动条操作模块
- 本章完成了音乐播放器的播放模式切换操作模块
习题 #
- 无