我可以使用QSlider的QTimer和为MP3设置Pygame混合器位置的设置来进行MP3更新。然而,我希望能够来回寻找,并保持准确的时间。
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, 30, 75, 23))
self.playBtn.setObjectName("playBtn")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 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_())发布于 2021-04-09 03:40:05
终于弄明白了。当self.timeSlider.value()调用keep_time函数时,每秒向添加1个整数允许我修改滑块,而不是将其锁定到设置的值。如果它能帮助任何想要创建自己的MP3播放器的人的话,我会添加这一点。我相信还有其他方法可以做到这一点,我对此深信不疑。
向上更改self.timeSlider.sliderMoved.connect(self.slider_changed)(originally .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()https://stackoverflow.com/questions/66994313
复制相似问题