python 做一個簡單的MP3

通過上一章的學習,是不是對tkinter有了個簡單的認識呢,本節將教大家如何做一個簡單的mp3,希望大家能有所收穫,寫的不足之處望大家諒解。

廢話少說,直接上代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame
import os
from tkinter import *
root = Tk()
root.title('老婆專用播放器')
root.geometry('800x600')
pygame.init()

music_path = r'C:\\Users\\zlcao\\Music'
current_play = 'R3hab - Skydrop (Radio Edit).mp3'
music_name = StringVar()

def play():
music_name.set(current_play)
pygame.mixer.music.load(os.path.join(music_path, current_play))
pygame.mixer.music.play()

Label(root, textvariable=music_name, font=('宋體', 14), justify='center',
bg='#ADD8E6').place(relx=0, rely=0.1, relwidth=1, relheight=0.3)
Button(root, text="播放", command=play).place(relx=0, rely=0.5, relwidth=0.2, relheight=0.1)
Button(root, text="暫停", command=lambda: pygame.mixer.music.pause()).place(relx=0.2, rely=0.5, relwidth=0.2, relheight=0.1)
Button(root, text="恢復", command=lambda: pygame.mixer.music.unpause()).place(relx=0.4, rely=0.5, relwidth=0.2, relheight=0.1)
Button(root, text="停止", command=lambda: pygame.mixer.music.stop()).place(relx=0.6, rely=0.5, relwidth=0.2, relheight=0.1)
Button(root, text="重播", command=lambda: pygame.mixer.music.rewind()).place(relx=0.8, rely=0.5, relwidth=0.2, relheight=0.1)
root.mainloop()
python 做一個簡單的MP3

代碼運行效果

先吐槽一下,代碼沒有粘貼出應有的效果,不知道是不是我使用的姿勢不對。

首先我們使用pygame庫來支持音頻處理,pygame是python的一個遊戲庫,有興趣的童鞋可以瞭解一下。

pygame.init() 意思是初始化所有導入的pygame模塊

music_name = StringVar() 這句話聲明瞭一個StringVar對象,他配合Label, Button的textvarable屬性來實現變量更新,界面顯示字符更新的功能。

pygame.mixer.music.load(os.path.join(music_path, current_play))

加載一個音頻文件

 pygame.mixer.music.play() 

播放加載的音頻文件

Label(root, textvariable=music_name, font=('宋體', 14), justify='center', 
bg='#ADD8E6').place(relx=0, rely=0.1, relwidth=1, relheight=0.3)

加載一個Label控件,該label控件的文字受StingVar類型的變量music_name 控制,可以通過music_name.set() 來改變label顯示的文字。font=('宋體', 14) 指定label控件的字體為宋體,字體大小為14號。justify屬性用來設置label控件的對齊方式,bg 是background的縮寫,指定label控件的背景色,如果要設置字體顏色,可以使用fg(foreground),用法同bg一樣。

place是tk 的一種佈局方式, tkinter共有三種佈局方式,pack, grid, place

relx和rely是相對父控件的位置。0是最左邊,0.5是正中間,1是最右邊

relwidth, relheight是相對父控件的大小。例如 relwidth=0.1相當於父控件寬度的0.1倍。

lambda是匿名函數,如果一個函數不想命名又沒有複雜的功能的情況下,可以使用匿名函 數,可以讓代碼更為簡潔。如何理解lambda呢,我舉個例子。

比如func = lambda x: x+1 等同於

def func(x):
return(x+1)

x是入參,x+1是函數體裡的執行語句並返回結果。

有些人可能會說,這些我都懂了,我如何能豐富我的界面功能了,這個也太簡陋了

python 做一個簡單的MP3

low

這裡我搜集了一些給大家提供一些參考

pygame.mixer.music.load() —— 載入一個音樂文件用於播放
pygame.mixer.music.play() —— 開始播放音樂流
pygame.mixer.music.rewind() —— 重新開始播放音樂
pygame.mixer.music.stop() —— 結束音樂播放
pygame.mixer.music.pause() —— 暫停音樂播放
pygame.mixer.music.unpause() —— 恢復音樂播放
pygame.mixer.music.fadeout() —— 淡出的效果結束音樂播放
pygame.mixer.music.set_volume() —— 設置音量
pygame.mixer.music.get_volume() —— 獲取音量
pygame.mixer.music.get_busy() —— 檢查是否正在播放音樂
pygame.mixer.music.set_pos() —— 設置播放的位置
pygame.mixer.music.get_pos() —— 獲取播放的位置
pygame.mixer.music.queue() —— 將一個音樂文件放入隊列中,並排在當前播放的音樂之後
pygame.mixer.music.set_endevent() —— 當播放結束時發出一個事件
pygame.mixer.music.get_endevent() —— 獲取播放結束時發送的事件

大家可以在我這個程序的基礎上繼續完善和改進,可以添加上一首下一首功能,也可以添加播放列表(treeview去做),感興趣的童鞋可以加我討論,一定知無不言言無不盡。最後通過pyinstaller打包成exe就好了,具體打包方法大家可以自行探索,另外希望大家多多支持。


分享到:


相關文章: