首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滑块寻位器

滑块寻位器
EN

Stack Overflow用户
提问于 2021-04-07 21:25:31
回答 1查看 86关注 0票数 0

我可以使用QSlider的QTimer和为MP3设置Pygame混合器位置的设置来进行MP3更新。然而,我希望能够来回寻找,并保持准确的时间。

代码语言:javascript
复制
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_())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-09 03:40:05

终于弄明白了。当self.timeSlider.value()调用keep_time函数时,每秒向添加1个整数允许我修改滑块,而不是将其锁定到设置的值。如果它能帮助任何想要创建自己的MP3播放器的人的话,我会添加这一点。我相信还有其他方法可以做到这一点,我对此深信不疑。

向上更改self.timeSlider.sliderMoved.connect(self.slider_changed)(originally .valueChanged)将滑块的位置发送到slider_changed函数

#################################################################################

代码语言:javascript
复制
 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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66994313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档