从PyQt5导入QtCore,QtWidgets,QtGui从PyQt5.QtCore导入Qt从PyQt5.QtMultimedia导入QMediaPlayer,QMediaContent,QMediaMetaData
从PyQt5.QtWidgets导入QApplication,QWidget,QInputDialog,QLineEdit,QFileDialog,QSlider
Ui_MainWinpage类(对象):def setupUi(自我,MainWinpage):MainWinpage.setObjectName(“ MainWinpage”)MainWinpage.resize(507,301)self.centralwidget = QtWidgets.QWidget(MainWinpage)self.centralwidget.setAutoFillBackground(True)self.centralwidget.setObjectName(“ centralwidget”)self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)self.gridLayout.setObjectName(“ gridLayout”)#sliderself.horizontalSlider = QtWidgets.QSlider(self.centralwidget)self.horizontalSlider.setGeometry(QtCore.QRect(190,180,160,16))self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)self.horizontalSlider.setObjectName(“ horizontalSlider”)self.horizontalSlider.valueChanged [int] .connect(self.changeValue)self.gridLayout.addWidget(self.horizontalSlider,0,0,1,3)self.play_song = QtWidgets.QPushButton(self.centralwidget)self.play_song.setObjectName(“ play_song”)self.gridLayout.addWidget(self.play_song,1,0,1,1)self.pause_song = QtWidgets.QPushButton(self.centralwidget)self.pause_song.setObjectName(“ pause_song”)self.gridLayout.addWidget(self.pause_song,1,1,1,1)self.stop_song = QtWidgets.QPushButton(self.centralwidget)self.stop_song.setObjectName(“ stop_song”)self.gridLayout.addWidget(self.stop_song,1,2,1,1)self.previous = QtWidgets.QPushButton(self.centralwidget)self.previous.setObjectName(“ previous”)self.gridLayout.addWidget(self.previous,2,0,1,1)self.shuffle = QtWidgets.QPushButton(self.centralwidget)self.shuffle.setObjectName(“ shuffle”)self.gridLayout.addWidget(self.shuffle,2,1,1,1)self.next = QtWidgets.QPushButton(self.centralwidget)self.next.setObjectName(“ next”)self.gridLayout.addWidget(self.next,2,2,1,1)#音量self.volumeSlider = QSlider(Qt.Horizontal)self.volumeSlider.setMaximum(32767)self.volumeSlider.setPageStep(1024)self.gridLayout.addWidget(self.volumeSlider,4,0,1,2)
MainWinpage.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWinpage)
self.menubar.setGeometry(QtCore.QRect(0, 0, 507, 22))
self.menubar.setObjectName("menubar")
self.menufile = QtWidgets.QMenu(self.menubar)
self.menufile.setObjectName("menufile")
MainWinpage.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWinpage)
self.statusbar.setObjectName("statusbar")
MainWinpage.setStatusBar(self.statusbar)
self.actionopen = QtWidgets.QAction(MainWinpage)
self.actionopen.setObjectName("actionopen")
self.menufile.addAction(self.actionopen)
self.menubar.addAction(self.menufile.menuAction())
self.pushButton = QtWidgets.QPushButton(MainWinpage)
self.pushButton.setObjectName("pushButton")
#for Qtmultimedia
self.media_player = QMediaPlayer()
self.media_player.durationChanged.connect(self.horizontalSlider.setMaximum)
self.media_player.positionChanged.connect(self.horizontalSlider.setValue)
self.volumeSlider.valueChanged.connect(self.changeVolume)
self.retranslateUi(MainWinpage)
QtCore.QMetaObject.connectSlotsByName(MainWinpage)
def retranslateUi(self, MainWinpage):
_translate = QtCore.QCoreApplication.translate
MainWinpage.setWindowTitle(_translate("MainWinpage", "MainWindow"))
self.play_song.setText(_translate("MainWinpage", "play"))
self.pause_song.setText(_translate("MainWinpage", "pause"))
self.stop_song.setText(_translate("MainWinpage", "stop"))
self.previous.setText(_translate("MainWinpage", "previous"))
self.shuffle.setText(_translate("MainWinpage", "shuffle"))
self.next.setText(_translate("MainWinpage", "next"))
self.menufile.setTitle(_translate("MainWinpage", "file"))
self.actionopen.setText(_translate("MainWinpage", "open "))
self.previous.setText(_translate("MainWinpage", "Browse"))
self.previous.clicked.connect(self.pushButton_handler)
self.play_song.clicked.connect(self.play_music)
self.pause_song.clicked.connect(self.pause_music)
self.stop_song.clicked.connect(self.stop_music)
def changeValue(self, value):
blocked = self.media_player.blockSignals(True)
value = self.horizontalSlider.value()
self.media_player.setPosition(value)
self.media_player.blockSignals(blocked)
def changeVolume(self, value):
self.volume = value
def pushButton_handler(self):
print("Button pressed")
self.open_dialog_box()
#for opening that file which you want to open
def open_dialog_box(self):
filename = QFileDialog.getOpenFileName()
path = str(filename[0])
self.media_player.setMedia(QMediaContent(QtCore.QUrl.fromLocalFile(path)))
print("path is ",path)
self.globalpath = path
print("global paths is ", self.globalpath)
#for playing that file which we had choosen from
def play_music(self):
artist = self.media_player.metaData(QMediaMetaData.AlbumArtist)
title = self.media_player.metaData(QMediaMetaData.Title)
self.media_player.play()
print("song name:",self.globalpath)
print(f"Now playing: {title} by {artist}")
#for pause that selected music
def pause_music(self):
self.media_player.pause()
print("song is paused")
#for stoping that music
def stop_music(self):
self.media_player.stop()
print("song is stopped")
如果名称 ==“ 主”:导入系统应用= QtWidgets.QApplication(sys.argv)MainWinpage = QtWidgets.QMainWindow()ui = Ui_MainWinpage()ui.setupUi(MainWinpage)MainWinpage.show()sys.exit(app.exec _())
代替使用pygame.mixer
,您可以考虑使用PyQt5.QtMultimedia.QMediaPlayer
。这样做的好处是,当歌曲的持续时间和/或当前位置已更改时,QMediaPlayer
会发出信号,您可以使用它来更新滑块的位置和最大值。歌曲的元数据(标题,艺术家等)可以通过QMediaPlayer.metaData
访问,例如
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QMediaMetaData
class Ui_MainWinpage(object):
def setupUi(self, MainWinpage):
....
self.media_player = QMediaPlayer()
self.media_player.durationChanged.connect(self.horizontalSlider.setMaximum)
self.media_player.positionChanged.connect(self.horizontalSlider.setValue)
def changeValue(self, value):
blocked = self.media_player.blockSignals(True)
value = self.horizontalSlider.value()
self.media_player.setPosition(value)
self.media_player.blockSignals(blocked)
def open_dialog_box(self):
filename = QFileDialog.getOpenFileName()
path = str(filename[0])
self.media_player.setMedia(QMediaContent(QtCore.QUrl.fromLocalFile(path)))
print("path is ",path)
self.globalpath = path
def play_music(self):
artist = self.media_player.metaData(QMediaMetaData.AlbumArtist)
title = self.media_player.metaData(QMediaMetaData.Title)
self.media_player.play()
print(f"Now playing: {title} by {artist}")
def pause_music(self):
self.media_player.pause()
print("song is paused")
def stop_music(self):
self.media_player.stop()
print("song is stopped")
要使滑块显示正在播放的歌曲的实时位置,请使用
setValue
(可能还有滑块上的setRange
。似乎没有一个API可以找出PyGame混音器当前正在播放的歌曲多长时间,因此可能会带来额外的障碍。