Loading... 导入模块 ``` import tkinter from tkinter import * from tkinter import filedialog from tkinter import messagebox from tkinter import ttk import os.path import pygame ```` tkinter实现图形化,os.path实现检测文件,pygame实现音乐播放(也可以用pydub等更专业的模块,在此不多赘述) ``` music_show=[] music_list=[] ```` 先初始化列表。 show列表是储存显示歌曲的,list则是储存文件路径的 ``` if os.path.exists('song.txt'): with open('song.txt','r')as rf: content=rf.readlines() # 读取所有行 for i in content: i=str(i).replace('\n','') music_list.append(i) print (content) print (music_list) for item in music_list: filename=os.path.basename(item) music_show.append(filename) #print (filename,'has benn add') else: file_path = None music_list=[] music_show=[] ```` 读取文件song.txt ``` def root(): global musiclist root=tkinter.Tk() root.geometry('1035x715') root.title('音乐播放器') information=Label(root,text='音乐播放器',font=('微软雅黑',20)) information.place(relx=0.0772946859903382,rely=0.0839160839160839) musiclist=Listbox(root,width=130,height=30) musiclist.place(relx=0.0772946859903382,rely=0.1398601398601399,relwidth=0.8,relheight=0.741958041958042) gun=Scrollbar(musiclist,orient=VERTICAL,width=20) gun.pack(side=tkinter.RIGHT, fill=tkinter.Y) addmusic=Button(root,text='添加音乐',font=('微软雅黑',10),command=add) addmusic.place(relx=0.0966183574879227,rely=0.9230769230769231,relheight=0.0559440559440559,relwidth=0.0676328502415459) playmusic=Button(root,text='开始播放',font=('微软雅黑',10),command=play) playmusic.place(relx=0.21256038647343,rely=0.9230769230769231,relheight=0.0559440559440559,relwidth=0.0676328502415459) stopmusic=Button(root,text='停止',font=('微软雅黑',10),command=stop) stopmusic.place(relx=0.3285024154589372,rely=0.9230769230769231,relheight=0.0559440559440559,relwidth=0.0676328502415459) deletmusci=Button(root,text='删除',font=('微软雅黑',10),command=delet) deletmusci.place(relx=0.4444444444444444,rely=0.9230769230769231,relheight=0.0559440559440559,relwidth=0.0676328502415459) continuemusic=Button(root,text='继续播放',font=('微软雅黑',10),command=continueplay) continuemusic.place(relx=0.5603864734299517,rely=0.9230769230769231,relheight=0.0559440559440559,relwidth=0.0676328502415459) loud=Button(root,text='音量',font=('微软雅黑',10),command=voice) loud.place(relx=0.6763285024154589,rely=0.9230769230769231,relheight=0.0559440559440559,relwidth=0.0676328502415459) for i in music_show: musiclist.insert(tkinter.END,i) root.mainloop() ```` 软件UI 通过比值的方式(relx,rely)来创建并固定组件(这边比值算的稍微有点细) 创建一个listbox来显示歌曲,并加上滑条,按钮和文本不多说了 ``` def add(): file_types = [('Audio Files', '*.mp3'),('Audio Files', '*.wav'),('Audio Files', '*.ogg')] file_path = filedialog.askopenfilename(filetypes=file_types) #music_list.append(file_path) if file_path: music_list.append(file_path) with open('song.txt','w',encoding='utf-8')as f: for i in music_list: i=i+'\n' f.write(i) for item in music_list: filename=os.path.basename(item) music_show=[] music_show.append(filename) for i in music_show: musiclist.insert(tkinter.END,i) ```` musiclist是用于文件名显示的,music_show用于储存文件名,如有更改则对其更新 song.txt来写入文件路径 os.path分离文件名和路径 ``` def play(): global current_music,sign,index pygame.mixer.init() pygame.mixer.music.stop() if musiclist.curselection(): # 检查是否有选中的条目 index = musiclist.curselection()[0] sign=index pygame.mixer.init() pygame.mixer.music.load(music_list[index]) pygame.mixer.music.play(0) else: messagebox.showinfo("提示", "请先选择一首音乐。") ```` 播放段,调用pygame,记得在开始播放前先暂停所有音乐 ``` def stop(): pygame.mixer.music.pause() ```` 最简单的一个,停止播放 ``` def delet(): if musiclist.curselection(): # 检查是否有选中的条目 index = musiclist.curselection()[0] del music_list[index] #print (music_list) with open('song.txt','w',encoding='utf-8')as f: for i in music_list: i=i+'\n' f.write(i) music_show=[] for item in music_list: filename=os.path.basename(item) music_show.append(filename) #print (music_show) musiclist.delete(0, tkinter.END) try: for i in music_show: musiclist.insert(tkinter.END, i) except: musiclist.delete(0, tkinter.END) else: messagebox.showinfo("提示", "请先选择一首音乐。") ```` 删除列表音乐,并重新显示到屏幕上 这边要注意如果还剩下最后一首,删除之后在更新显示的时候会报错因为没有可添加的内容到musiclist 所以用try,except排异,如果只剩下最后一首,则直接清除musiclist ``` def continueplay(): pygame.mixer.music.unpause() ```` 继续播放 ``` def voice(): global setloud voice=Toplevel() voice.geometry('170x300') voice.title('音量调整') setloud = ttk.Scale(voice, from_=0, to=100, orient="horizontal",command=adjust_volume) setloud.pack() def adjust_volume(event): volume=setloud.get() / 100.0 # 将滑块值转换为0.0到1.0之间的音量值 pygame.mixer.init() pygame.mixer.music.set_volume(volume) # 设置声道的音量 ```` 创建一个子窗口,在上面创建一个滑块,和pygame的音量绑定 ``root()`` 最后,启动! 这样,一个简易的音乐播放器就做好了 最后修改:2024 年 04 月 14 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏