python音乐播放器代码_用python做 音乐播放器 搜索板块的代码是上一篇

# -*- coding:utf-8 -*-

# Author:

import sip

sip.setapi('QString', 2)

import sys

import os

from PyQt4 import QtCore, QtGui

try:

from PyQt4.phonon import Phonon

except ImportError:

app = QtGui.QApplication(sys.argv)

QtGui.QMessageBox.critical(None, "Music Player",

"Your Qt installation does not have Phonon support.",

QtGui.QMessageBox.Ok | QtGui.QMessageBox.Default,

QtGui.QMessageBox.NoButton)

sys.exit(1)

class MainWindow(QtGui.QMainWindow):

def __init__(self):

super(QtGui.QMainWindow, self).__init__()

self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self)

self.mediaObject = Phonon.MediaObject(self)

self.metaInformationResolver = Phonon.MediaObject(self)

self.mediaObject.setTickInterval(1000)

self.mediaObject.tick.connect(self.tick)

self.mediaObject.stateChanged.connect(self.stateChanged)

self.metaInformationResolver.stateChanged.connect(self.metaStateChanged)

self.mediaObject.currentSourceChanged.connect(self.sourceChanged)

self.mediaObject.aboutToFinish.connect(self.aboutToFinish)

Phonon.createPath(self.mediaObject, self.audioOutput)

self.setupActions() #格局设计

self.setupMenus()

self.setupUi()

self.timeLcd.display("00:00")

self.sources = []

# file_list = os.listdir("songs")

# for file_line in file_list:

# self.sources.append(file_list)

# self.metaInformationResolver.setCurrentSource(self.sources[ file_list])

def sizeHint(self):

return QtCore.QSize(500, 300)

def addFiles(self):# 文件夹添加

files = QtGui.QFileDialog.getOpenFileNames(self, "Select Music Files",

QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MusicLocation))

if not files:

return

index = len(self.sources)

for string in files:

self.sources.append(Phonon.MediaSource(string))

# self.sources.append("C:\Users\Administrator\Music")

if self.sources:

self.metaInformationResolver.setCurrentSource(self.sources[index])

def about(self): #按键help 的定义函数

QtGui.QMessageBox.information(self, "About Music Player",

"zi ji xiang ban fa ")

def found(self):#按键found 的定义

import url

def update(self):

# index = len(self.sources)

# file_list = os.listdir("C:/Users/Administrator/Music/songs")

# for file_line in file_list:

# self.sources.append(Phonon.MediaSource(file_line))

#

# if self.sources:

# self.metaInformationResolver.setCurrentSource(self.sources[index])

# files = QtGui.QFileDialog.getOpenFileNames(self, "Select Music Files",

# QtGui.QDesktopServices.storageLocation(

# QtGui.QDesktopServices.MusicLocation))

# files="C:\Users\Administrator\Music\songs\Last Order.mp3"

file_list = os.listdir("C:/Users/Administrator/Music/songs")

for files in file_list:

print files

if not files:

return

index = len(self.sources)

for string in files:

self.sources.append(Phonon.MediaSource(string))

if self.sources:

self.metaInformationResolver.setCurrentSource(self.sources[index])

def stateChanged(self, newState, oldState): # 播放定义

if newState == Phonon.ErrorState:

if self.mediaObject.errorType() == Phonon.FatalError:

QtGui.QMessageBox.warning(self, "Fatal Error",

self.mediaObject.errorString())

else:

QtGui.QMessageBox.warning(self, "Error",

self.mediaObject.errorString())

elif newState == Phonon.PlayingState:

self.playAction.setEnabled(False)

self.pauseAction.setEnabled(True)

self.stopAction.setEnabled(True)

elif newState == Phonon.StoppedState:

self.stopAction.setEnabled(False)

self.playAction.setEnabled(True)

self.pauseAction.setEnabled(False)

self.timeLcd.display("00:00")

elif newState == Phonon.PausedState:

self.pauseAction.setEnabled(False)

self.stopAction.setEnabled(True)

self.playAction.setEnabled(True)

def tick(self, time):

displayTime = QtCore.QTime(0, (time / 60000) % 60, (time / 1000) % 60)

self.timeLcd.display(displayTime.toString('mm:ss'))

def tableClicked(self, row, column):

wasPlaying = (self.mediaObject.state() == Phonon.PlayingState)

self.mediaObject.stop()

self.mediaObject.clearQueue()

self.mediaObject.setCurrentSource(self.sources[row])

if wasPlaying:

self.mediaObject.play()

else:

self.mediaObject.stop()

def sourceChanged(self, source):

self.musicTable.selectRow(self.sources.index(source))

self.timeLcd.display('00:00')

def metaStateChanged(self, newState, oldState):

if newState == Phonon.ErrorState:

QtGui.QMessageBox.warning(self, "Error opening files",

self.metaInformationResolver.errorString())

while self.sources and self.sources.pop() != self.metaInformationResolver.currentSource():

pass

return

if newState != Phonon.StoppedState and newState != Phonon.PausedState:

return

if self.metaInformationResolver.currentSource().type() == Phonon.MediaSource.Invalid:

return

metaData = self.metaInformationResolver.metaData()

title = metaData.get('TITLE', [''])[0]

if not title:

title = self.metaInformationResolver.currentSource().fileName()

titleItem = QtGui.QTableWidgetItem(title)

titleItem.setFlags(titleItem.flags() ^ QtCore.Qt.ItemIsEditable)

artist = metaData.get('ARTIST', [''])[0]

artistItem = QtGui.QTableWidgetItem(artist)

artistItem.setFlags(artistItem.flags() ^ QtCore.Qt.ItemIsEditable)

album = metaData.get('ALBUM', [''])[0]

albumItem = QtGui.QTableWidgetItem(album)

albumItem.setFlags(albumItem.flags() ^ QtCore.Qt.ItemIsEditable)

year = metaData.get('DATE', [''])[0]

yearItem = QtGui.QTableWidgetItem(year)

yearItem.setFlags(yearItem.flags() ^ QtCore.Qt.ItemIsEditable)

currentRow = self.musicTable.rowCount()

self.musicTable.insertRow(currentRow)

self.musicTable.setItem(currentRow, 0, titleItem)

self.musicTable.setItem(currentRow, 1, artistItem)

self.musicTable.setItem(currentRow, 2, albumItem)

self.musicTable.setItem(currentRow, 3, yearItem)

if not self.musicTable.selectedItems():

self.musicTable.selectRow(0)

self.mediaObject.setCurrentSource(self.metaInformationResolver.currentSource())

index = self.sources.index(self.metaInformationResolver.currentSource()) + 1

if len(self.sources) > index:

self.metaInformationResolver.setCurrentSource(self.sources[index])

else:

self.musicTable.resizeColumnsToContents()

if self.musicTable.columnWidth(0) > 300:

self.musicTable.setColumnWidth(0, 300)

def aboutToFinish(self):

index = self.sources.index(self.mediaObject.currentSource()) + 1

if len(self.sources) > index:

self.mediaObject.enqueue(self.sources[index])

def setupActions(self): # 按键功能链接

self.playAction = QtGui.QAction(

self.style().standardIcon(QtGui.QStyle.SP_MediaPlay), "Play",

self, shortcut="Ctrl+P", enabled=False,

triggered=self.mediaObject.play)

self.pauseAction = QtGui.QAction(

self.style().standardIcon(QtGui.QStyle.SP_MediaPause),

"Pause", self, shortcut="Ctrl+A", enabled=False,

triggered=self.mediaObject.pause)

self.stopAction = QtGui.QAction(

self.style().standardIcon(QtGui.QStyle.SP_MediaStop), "Stop",

self, shortcut="Ctrl+S", enabled=False,

triggered=self.mediaObject.stop)

self.nextAction = QtGui.QAction(

self.style().standardIcon(QtGui.QStyle.SP_MediaSkipForward),

"Next", self, shortcut="Ctrl+N")

self.previousAction = QtGui.QAction(

self.style().standardIcon(QtGui.QStyle.SP_MediaSkipBackward),

"Previous", self, shortcut="Ctrl+R")

self.addFilesAction = QtGui.QAction("Add &Files", self,

shortcut="Ctrl+D", triggered=self.addFiles)

self.exitAction = QtGui.QAction("E&xit", self, shortcut="Ctrl+X",

triggered=self.close)

self.aboutAction = QtGui.QAction("A&bout", self, shortcut="Ctrl+B",

triggered=self.about)

self.aboutQtAction = QtGui.QAction("About &Qt", self,

shortcut="Ctrl+Q", triggered=QtGui.qApp.aboutQt)

self.foundAction = QtGui.QAction("found &Qt", self,

shortcut="Ctrl+F", triggered=self.found)

self.updateAction = QtGui.QAction("updata &Qt", self,

shortcut="Ctrl+U", triggered=self.update)

def setupMenus(self): # 文件 帮助 查找 按键定义

fileMenu = self.menuBar().addMenu("&File")

fileMenu.addAction(self.addFilesAction)

fileMenu.addSeparator()

fileMenu.addAction(self.exitAction)

aboutMenu = self.menuBar().addMenu("&HELP")

aboutMenu.addAction(self.aboutAction)

# aboutMenu.addAction(self.aboutQtAction)

aboutMenu = self.menuBar().addMenu("&found")

aboutMenu.addAction(self.foundAction)

aboutMenu = self.menuBar().addMenu("&updata")

aboutMenu.addAction(self.updateAction)

def setupUi(self):# 开始 结束 暂停

bar = QtGui.QToolBar()

bar.addAction(self.playAction)

bar.addAction(self.pauseAction)

bar.addAction(self.stopAction)

self.seekSlider = Phonon.SeekSlider(self)

self.seekSlider.setMediaObject(self.mediaObject)

self.volumeSlider = Phonon.VolumeSlider(self)

self.volumeSlider.setAudioOutput(self.audioOutput)

self.volumeSlider.setSizePolicy(QtGui.QSizePolicy.Maximum,

QtGui.QSizePolicy.Maximum)

volumeLabel = QtGui.QLabel()

volumeLabel.setPixmap(QtGui.QPixmap('headset.png'))

palette = QtGui.QPalette()

palette.setBrush(QtGui.QPalette.Light, QtCore.Qt.darkGray)

self.timeLcd = QtGui.QLCDNumber()

self.timeLcd.setPalette(palette)

headers = ("Title", "Artist", "Album", "Year") #第二行按键定义

self.musicTable = QtGui.QTableWidget(0, 4)

self.musicTable.setHorizontalHeaderLabels(headers)

self.musicTable.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)

self.musicTable.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)

self.musicTable.cellPressed.connect(self.tableClicked)

# musicTabel = QtGui.QLabel()

# musicTabel.setPixmap(QtGui.QPixmap('button.png'))

seekerLayout = QtGui.QHBoxLayout()

seekerLayout.addWidget(self.seekSlider)

seekerLayout.addWidget(self.timeLcd)

playbackLayout = QtGui.QHBoxLayout()

playbackLayout.addWidget(bar)

playbackLayout.addStretch()

playbackLayout.addWidget(volumeLabel)

playbackLayout.addWidget(self.volumeSlider)

mainLayout = QtGui.QVBoxLayout()

mainLayout.addWidget(self.musicTable)

mainLayout.addLayout(seekerLayout)

mainLayout.addLayout(playbackLayout)

widget = QtGui.QWidget()

widget.setLayout(mainLayout)

self.setCentralWidget(widget)

self.setWindowTitle("wangyi music")

if __name__ == '__main__': #启动函数

app = QtGui.QApplication(sys.argv)

app.setApplicationName("Music Player")

app.setQuitOnLastWindowClosed(True)

window = MainWindow()

window.show()

sys.exit(app.exec_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值