來源丨速學(xué)Python
https://mp.weixin.qq.com/s/C9doSoz0uHn2VAApBuGsNg
本節(jié)將教大家如何做一個(gè)簡(jiǎn)單的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='恢復(fù)', 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()
代碼運(yùn)行效果
先吐槽一下,代碼沒有粘貼出應(yīng)有的效果,不知道是不是我使用的姿勢(shì)不對(duì)。
首先我們使用pygame庫(kù)來支持音頻處理,pygame是python的一個(gè)游戲庫(kù),有興趣的童鞋可以了解一下。
pygame.init() 意思是初始化所有導(dǎo)入的pygame模塊
music_name = StringVar() 這句話聲明了一個(gè)StringVar對(duì)象,他配合Label, Button的textvarable屬性來實(shí)現(xiàn)變量更新,界面顯示字符更新的功能。
pygame.mixer.music.load(os.path.join(music_path, current_play))
加載一個(gè)音頻文件
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)
加載一個(gè)Label控件,該label控件的文字受StingVar類型的變量music_name 控制,可以通過music_name.set() 來改變label顯示的文字。font=('宋體', 14) 指定label控件的字體為宋體,字體大小為14號(hào)。justify屬性用來設(shè)置label控件的對(duì)齊方式,bg 是background的縮寫,指定label控件的背景色,如果要設(shè)置字體顏色,可以使用fg(foreground),用法同bg一樣。
place是tk 的一種布局方式, tkinter共有三種布局方式,pack, grid, place
relx和rely是相對(duì)父控件的位置。0是最左邊,0.5是正中間,1是最右邊
relwidth, relheight是相對(duì)父控件的大小。例如 relwidth=0.1相當(dāng)于父控件寬度的0.1倍。
lambda是匿名函數(shù),如果一個(gè)函數(shù)不想命名又沒有復(fù)雜的功能的情況下,可以使用匿名函 數(shù),可以讓代碼更為簡(jiǎn)潔。如何理解lambda呢,我舉個(gè)例子。
比如func = lambda x: x+1 等同于
def func(x):
return(x+1)
x是入?yún)?,x+1是函數(shù)體里的執(zhí)行語句并返回結(jié)果。
有些人可能會(huì)說,這些我都懂了,我如何能豐富我的界面功能了,這個(gè)也太簡(jiǎn)陋了
low
這里我搜集了一些給大家提供一些參考
pygame.mixer.music.load() —— 載入一個(gè)音樂文件用于播放pygame.mixer.music.play() —— 開始播放音樂流pygame.mixer.music.rewind() —— 重新開始播放音樂pygame.mixer.music.stop() —— 結(jié)束音樂播放pygame.mixer.music.pause() —— 暫停音樂播放pygame.mixer.music.unpause() —— 恢復(fù)音樂播放pygame.mixer.music.fadeout() —— 淡出的效果結(jié)束音樂播放pygame.mixer.music.set_volume() —— 設(shè)置音量pygame.mixer.music.get_volume() —— 獲取音量pygame.mixer.music.get_busy() —— 檢查是否正在播放音樂pygame.mixer.music.set_pos() —— 設(shè)置播放的位置pygame.mixer.music.get_pos() —— 獲取播放的位置pygame.mixer.music.queue() —— 將一個(gè)音樂文件放入隊(duì)列中,并排在當(dāng)前播放的音樂之后pygame.mixer.music.set_endevent() —— 當(dāng)播放結(jié)束時(shí)發(fā)出一個(gè)事件pygame.mixer.music.get_endevent() —— 獲取播放結(jié)束時(shí)發(fā)送的事件
大家可以在我這個(gè)程序的基礎(chǔ)上繼續(xù)完善和改進(jìn),可以添加上一首下一首功能,也可以添加播放列表(treeview去做),感興趣的童鞋可以加我討論,一定知無不言言無不盡。最后通過pyinstaller打包成exe就好了,具體打包方法大家可以自行探索,另外希望大家多多支持。
聯(lián)系客服