对于热门语言深感兴趣 ,激励自己多多学习和实践,自己也决定做个开头,一步步来实现音乐播放器功能。刚开始的设计,只是实现了简单的音乐播放、暂停、退出功能。至于还有些功能键的添加, 以及树形结构来添加播放歌曲的功能,还有待学习。本文知识简单的实现了播放固定目录下的歌曲播放功能,记录一下学习中所遇到的问题,方便自己学习。众多的毛病还请大家当成看戏,希望得到各位指点。
首先介绍一下实现简单的创建一个GUI下的controls。通过导入wxpython包之后。创建一个简单的播放窗口:
import wx
class IsPrimeFrame(wx.Frame):
def __init__(self,superion,count=0):
wx.Frame.__init__(self,parent=superion ,title='Big Eye',size = (400,200))
self.count=count
panel = wx.Panel(self)
panel.SetBackgroundColour('Red')
if __name__ == '__main__':
aa = wx.App()
frame = IsPrimeFrame(None)
frame.Show()
aa.MainLoop()
大加不要笑我,我还是一步步学习的过程。哈哈,接着自我陶醉。创建好窗口后,要实现简单的controls的事件处理。
self.buttonPlay = wx.Button(parent=panel,label='PLAY',pos=(50,90)) self.Bind(wx.EVT_BUTTON,self.OnbuttonPlay,self.buttonPlay) self.buttonPause = wx.Button(parent=panel,label='Pause',pos=(150,90)) self.Bind(wx.EVT_BUTTON,self.OnbuttonPause,self.buttonPause) self.buttonQuit = wx.Button(parent=panel,label='Quit',pos=(250,90)) self.Bind(wx.EVT_BUTTON,self.OnbuttonQuit,self.buttonQuit)在播放窗口中添加三个功能按钮,分别PLAY、Pause、Quit。而三个按钮要实现功能时,则要创建事件处理函数
OnbuttonPlay、OnbuttonPause、OnbuttonPause。每个功能函数具体如下:
def OnbuttonPlay(self,even): folder = r'd:\music' musics = [folder+'\\'+music for music in os.listdir(folder) if music.endswith('.mp3')] pygame.mixer.init() total =len(musics) if not pygame.mixer.music.get_busy(): playMusic = random.choice(musics) pygame.mixer.music.load(playMusic) pygame.mixer.music.play(1) print 'playing...',playMusic else: time.sleep(1) def OnbuttonPause(self,even): if self.count%2 ==0: pygame.mixer.music.pause() else: pygame.mixer.music.unpause() self.count = self.count+1 def OnbuttonQuit(self,even): dlg = wx.MessageDialog(self,'Really Quit?','Caution',wx.CANCEL|wx.OK|wx.ICON_QUESTION) if dlg.ShowModal() ==wx.ID_OK: self.Destroy()
现在就我自己的个人经历来具体讲一下编写这三个函数中遇到的问题。OnbuttonPlay事件函数实现,当按钮PLAY单击时,通过导入pygame模块来实现音乐的播放。
在实现这个事件绑定时,首先我得指导如何才能实现在绝对路径下的歌曲播放。通过下面代码的确可以实现歌曲的播放(后面我才发现的)
import pygame
import os
import random
import time
folder = r'd:\music'
musics = [folder+'\\'+music for music in os.listdir(folder) if music.endswith('.mp3')]
pygame.mixer.init()
if not pygame.mixer.music.get_busy():
playMusic = random.choice(musics)
pygame.mixer.music.load(playMusic)
pygame.mixer.music.play(1)
print 'playing...',playMusic
else:
time.sleep(1)
但是当代码觉得没有问题的时候,就是发现不能播放,我觉得是自己的歌曲可能有问题,然后就把所有的中文标题歌曲改成英文的,结果就播放成功了。诶,吐槽一下,作为一个菜鸟,我真的想知道怎样改进可以播放中文标题的歌曲。这是待解决问题一。
OnbuttonPause这个功能键是我突然想到的,然后刚开也不知道如何在播放时突然让它停止,然后停止后如何播放呢?突然想到,每次实现事件触发时,这个函数都会执行一次,那么在类中添加变量,每次调用这个功能时,变量加1,从而实现暂停和播放的功能实现,这个我还是比较满意的。菜鸟的乐趣,哈哈!
最后的OnbuttonQuit时间处理就是毫无个人创新,就是是否确认退出功能。
总得来说最后的简单框如下:
然后也实现了暂停和播放功能,本来想添加一个Next的键,可是现在还没想通。是不是很水!!
期望就是,以后慢慢来完善吧,雏形,哈哈,希望能有更多功能自己会掌握,写这个完全是为了告诉自己,自己经历过,记录下来方便自己的成长,继续努力咯!简单的代码也放在了https://github.com/xaowoodenfish/Chapter3/blob/master/musicbar.py。还望有人指点和帮助。