<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
就是用Python做一個簡易的音樂播放器,廢話不多說,咱們直接開幹
當然,今天做這個肯定不是最簡單的,最簡單的音樂播放器,9行程式碼足以
import time import pygame file = r'歌曲路徑' pygame.mixer.init() print('正在播放',file) track = pygame.mixer.music.load(file) pygame.mixer.music.play() time.sleep(130) pygame.mixer.music.stop()
1.python基礎知識
2.requests庫
3.time
4.pygame
5.tkinter
6.執行緒
windows
pycharm 2021.2
python 3.8
# 匯入 import os import time import tkinter import tkinter.filedialog import threading import pygame # pip root = tkinter.Tk() root.title('音樂播放器') root.geometry('460x600+500+100') root.resizable(False,False) # 不能拉伸 folder ='' res = [] num = 0 now_music = '' def buttonChooseClick(): """ 新增資料夾 :return: """ global folder global res if not folder: folder = tkinter.filedialog.askdirectory() musics = [folder + '\' + music for music in os.listdir(folder) if music.endswith(('.mp3','.wav','.ogg'))] ret = [] for i in musics: ret.append(i.split('\')[1:]) res.append(i.replace('\','/')) var2 = tkinter.StringVar() var2.set(ret) lb = tkinter.Listbox(root,listvariable=var2) lb.place(x=50,y=100,width=260,height=300) if not folder: return global playing playing = True # 根據情況禁用和啟用相應的按鈕 buttonPlay['state'] = 'normal' buttonStop['state'] = 'normal' # buttonPause['state'] = 'normal' pause_resume.set('播放') def play(): """ 播放音樂 :return: """ if len(res): pygame.mixer.init() global num while playing: if not pygame.mixer.music.get_busy(): netxMusic = res[num] print(netxMusic) print(num) pygame.mixer.music.load(netxMusic.encode()) # 播放 pygame.mixer.music.play(1) if len(res) -1 == num: num = 0 else: num = num + 1 netxMusic = netxMusic.split('\')[1:] musicName.set('playing......' + ''.join(netxMusic)) else: time.sleep(0.1) def buttonPlayClick(): """ 點選播放 :return: """ buttonNext['state'] = 'normal' buttonPrev['state'] = 'normal' # 選擇要播放的音樂資料夾 if pause_resume.get() == '播放': pause_resume.set('暫停') global folder if not folder: folder = tkinter.filedialog.askdirectory() if not folder: return global playing playing = True # 建立一個執行緒來播放音樂,當前主執行緒用來接收使用者操作 t = threading.Thread(target=play) t.start() elif pause_resume.get() == '暫停': # pygame.mixer.init() pygame.mixer.music.pause() pause_resume.set('繼續') elif pause_resume.get() == '繼續': # pygame.mixer.init() pygame.mixer.music.unpause() pause_resume.set('暫停') def buttonStopClick(): """ 停止播放 :return: """ global playing playing = False pygame.mixer.music.stop() def buttonNextClick(): """ 下一首 :return: """ global playing playing = False pygame.mixer.music.stop() global num if len(res) == num: num = 0 playing = True # 建立執行緒播放音樂,主執行緒用來接收使用者操作 t = threading.Thread(target=play) t.start() def closeWindow(): """ 關閉視窗 :return: """ # 修改變數,結束執行緒中的迴圈 global playing playing = False time.sleep(0.3) try: # 停止播放,如果已停止, # 再次停止時會丟擲異常,所以放在例外處理結構中 pygame.mixer.music.stop() pygame.mixer.quit() except: pass root.destroy() def control_voice(value=0.5): """ 聲音控制 :param value: 0.0-1.0 :return: """ pygame.mixer.music.set_volume(float(value)) def buttonPrevClick(): """ 上一首 :return: """ global playing playing = False pygame.mixer.music.stop() # # pygame.mixer.quit() global num # num += 1 # num -= 1 if num == 0: num = len(res) - 2 # num -= 1 elif num == len(res) - 1: num -= 2 else: num -= 2 # num -= 1 print(num) playing = True # 建立一個執行緒來播放音樂,當前主執行緒用來接收使用者操作 t = threading.Thread(target=play) t.start() # 視窗關閉 root.protocol('WM_DELETE_WINDOW', closeWindow) # 新增按鈕 buttonChoose = tkinter.Button(root,text='新增',command=buttonChooseClick) # 佈局 buttonChoose.place(x=50,y=10,width=50,height=20) # 播放按鈕 pause_resume = tkinter.StringVar(root,value='播放') buttonPlay = tkinter.Button(root,textvariable=pause_resume,command=buttonPlayClick) buttonPlay.place(x=190,y=10,width=50,height=20) buttonPlay['state'] = 'disabled' # 停止按鈕 buttonStop = tkinter.Button(root, text='停止',command=buttonStopClick) buttonStop.place(x=120, y=10, width=50, height=20) buttonStop['state'] = 'disabled' # 下一首 buttonNext = tkinter.Button(root, text='下一首',command=buttonNextClick) buttonNext.place(x=260, y=10, width=50, height=20) buttonNext['state'] = 'disabled' # 上一首 buttonPrev = tkinter.Button(root, text='上一首',command=buttonPrevClick) buttonPrev.place(x=330, y=10, width=50, height=20) buttonPrev['state'] = 'disabled' # 標籤 musicName = tkinter.StringVar(root, value='暫時沒有播放音樂...') labelName = tkinter.Label(root, textvariable=musicName) labelName.place(x=10, y=30, width=260, height=20) # 音量控制 # HORIZONTAL表示為水平放置,預設為豎直,豎直為vertical s = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL, length=240, showvalue=0, tickinterval=2, resolution=0.1,command=control_voice) s.place(x=50, y=50, width=200) # 顯示 root.mainloop()
簡易版的
還有個半成品的,目前程式碼沒寫完
import os import time import tkinter import tkinter.filedialog import threading import pygame
root = tkinter.Tk() root.title('音樂播放器') root.geometry('460x600+500+100') root.resizable(False,False) # 不能拉伸 # 顯示 root.mainloop()
# 新增按鈕 buttonChoose = tkinter.Button(root,text='新增') # 佈局 buttonChoose.place(x=50,y=10,width=50,height=20) # 播放按鈕 pause_resume = tkinter.StringVar(root,value='播放') buttonPlay = tkinter.Button(root,textvariable=pause_resume) buttonPlay.place(x=190,y=10,width=50,height=20) buttonPlay['state'] = 'disabled' # 停止按鈕 buttonStop = tkinter.Button(root, text='停止') buttonStop.place(x=120, y=10, width=50, height=20) buttonStop['state'] = 'disabled' # 下一首 buttonNext = tkinter.Button(root, text='下一首') buttonNext.place(x=260, y=10, width=50, height=20) buttonNext['state'] = 'disabled' # 上一首 buttonPrev = tkinter.Button(root, text='上一首') buttonPrev.place(x=330, y=10, width=50, height=20) buttonPrev['state'] = 'disabled' # 標籤 musicName = tkinter.StringVar(root, value='暫時沒有播放音樂...') labelName = tkinter.Label(root, textvariable=musicName) labelName.place(x=10, y=30, width=260, height=20) # 音量控制 # HORIZONTAL表示為水平放置,預設為豎直,豎直為vertical s = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL, length=240, showvalue=0, tickinterval=2, resolution=0.1) s.place(x=50, y=50, width=200)
folder ='' res = [] num = 0 now_music = ''
def buttonChooseClick(): global folder global res if not folder: folder = tkinter.filedialog.askdirectory() musics = [folder + '\' + music for music in os.listdir(folder) if music.endswith(('.mp3','.wav','.ogg'))] ret = [] for i in musics: ret.append(i.split('\')[1:]) res.append(i.replace('\','/')) if not folder: return global playing playing = True # 根據情況禁用和啟用相應的按鈕 buttonPlay['state'] = 'normal' buttonStop['state'] = 'normal' # buttonPause['state'] = 'normal' pause_resume.set('播放')
var2 = tkinter.StringVar() var2.set(ret) lb = tkinter.Listbox(root,listvariable=var2) lb.place(x=50,y=100,width=260,height=300)
def play(): if len(res): pygame.mixer.init() global num while playing: if not pygame.mixer.music.get_busy(): netxMusic = res[num] print(netxMusic) print(num) pygame.mixer.music.load(netxMusic.encode()) # 播放 pygame.mixer.music.play(1) if len(res) -1 == num: num = 0 else: num = num + 1 netxMusic = netxMusic.split('\')[1:] musicName.set('playing......' + ''.join(netxMusic)) else: time.sleep(0.1) # 點選播放 def buttonPlayClick(): buttonNext['state'] = 'normal' buttonPrev['state'] = 'normal' # 選擇要播放的音樂資料夾 if pause_resume.get() == '播放': pause_resume.set('暫停') global folder if not folder: folder = tkinter.filedialog.askdirectory() if not folder: return global playing playing = True # 建立一個執行緒來播放音樂,當前主執行緒用來接收使用者操作 t = threading.Thread(target=play) t.start() elif pause_resume.get() == '暫停': # pygame.mixer.init() pygame.mixer.music.pause() pause_resume.set('繼續') elif pause_resume.get() == '繼續': # pygame.mixer.init() pygame.mixer.music.unpause() pause_resume.set('暫停')
def buttonStopClick(): global playing playing = False pygame.mixer.music.stop()
def buttonNextClick(): global playing playing = False pygame.mixer.music.stop() global num if len(res) == num: num = 0 playing = True # 建立執行緒播放音樂,主執行緒用來接收使用者操作 t = threading.Thread(target=play) t.start()
def buttonPrevClick(): global playing playing = False pygame.mixer.music.stop() # # pygame.mixer.quit() global num # num += 1 # num -= 1 if num == 0: num = len(res) - 2 # num -= 1 elif num == len(res) - 1: num -= 2 else: num -= 2 # num -= 1 print(num) playing = True # 建立一個執行緒來播放音樂,當前主執行緒用來接收使用者操作 t = threading.Thread(target=play) t.start()
def control_voice(value=0.5): pygame.mixer.music.set_volume(float(value))
def closeWindow(): # 修改變數,結束執行緒中的迴圈 global playing playing = False time.sleep(0.3) try: # 停止播放,如果已停止, # 再次停止時會丟擲異常,所以放在例外處理結構中 pygame.mixer.music.stop() pygame.mixer.quit() except: pass root.destroy()
到此這篇關於Python實現多功能音樂播放器詳解的文章就介紹到這了,更多相關Python音樂播放器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45