如何解决滑块寻找位置pygamemixer
我可以使用 QTimer 和 Pygame 混合器的 MP3 位置设置值来更新 QSlider。但是,我希望能够来回寻找并保持准确的时间。
from PyQt5 import QtCore,QtGui,QtWidgets
from PyQt5.QtCore import QSize,Qt,QTimer
import pygame
from mutagen.mp3 import MP3
pygame.init()
class Ui_MainWindow(object):
def setupUi(self,MainWindow):
MainWindow.setobjectName("MainWindow")
MainWindow.resize(791,125)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setobjectName("centralwidget")
self.timeSlider = QtWidgets.QSlider(self.centralwidget)
self.timeSlider.setGeometry(QtCore.QRect(180,30,421,22))
self.timeSlider.setorientation(QtCore.Qt.Horizontal)
self.timeSlider.setobjectName("timeSlider")
self.playBtn = QtWidgets.QPushButton(self.centralwidget)
self.playBtn.setGeometry(QtCore.QRect(30,75,23))
self.playBtn.setobjectName("playBtn")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,791,21))
self.menubar.setobjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setobjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.timer=QTimer()
self.timer.setInterval(1000)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setwindowTitle(_translate("MainWindow","MainWindow"))
self.playBtn.setText(_translate("MainWindow","Play"))
self.playBtn.clicked.connect(self.play)
self.timeSlider.valueChanged.connect(self.slider_changed)
self.timer.timeout.connect(self.slider_changed)
def play(self):
pygame.mixer.music.load('C:/mp3/audio/Your love.mp3')
pygame.mixer.music.play()
self.timer.start(1000)
def slider_changed(self):
song_mutagen=MP3('C:/mp3/audio/Your love.mp3')
songLength = song_mutagen.info.length
self.timeSlider.setMaximum(songLength)
current_time=int(pygame.mixer.music.get_pos()/1000)
self.timeSlider.setValue(current_time)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
解决方法
终于搞定了。当 QTimer 调用 keep_time 函数时,每秒向 self.timeSlider.value() 添加 1 个整数允许我修改滑块而不是将其锁定到设置值.如果它可以帮助任何想要创建自己的 MP3 播放器的人,我会添加它。我相信还有其他方法可以做到这一点,我对此非常关注。
up top change self.timeSlider.sliderMoved.connect(self.slider_changed)(原为.valueChanged)将滑块的位置发送给slider_changed函数
############################################ #################################
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
self.playBtn.setText(_translate("MainWindow","Play"))
self.playBtn.clicked.connect(self.play)
self.timeSlider.sliderMoved.connect(self.slider_changed)
self.timer.timeout.connect(self.keep_time)
def play(self):
pygame.mixer.music.load('C:/mp3/audio/Your Love.mp3')
self.timeSlider.setValue(0)
pygame.mixer.music.play()
self.timer.start()
def slider_changed(self,position):
song_mutagen=MP3('C:/mp3/audio/Your Love.mp3')
songLength = song_mutagen.info.length
self.timeSlider.setMaximum(songLength)
self.timeSlider.blockSignals(True)
pygame.mixer.music.set_pos(position)
self.timeSlider.blockSignals(False)
####Qtimer calls this function every second to update the slider starting from 0
def keep_time(self):
self.timeSlider.setMinimum(0)
song_mutagen=MP3('C:/mp3/audio/Your Love.mp3')
songLength = song_mutagen.info.length
self.timeSlider.setMaximum(songLength)
next_time = self.timeSlider.value() +1 #Add 1 to the Slider value each pass
self.timeSlider.setValue(next_time) #Set the Value to next time value
if next_time >= songLength:
self.timer.stop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。