Python制作9行最简单音乐播放器?不,我不满足
创始人
2025-05-30 09:32:08
0

人生苦短 我用python

好久不见啦~这次就来给大家整个大福利 ~

源码资料电子书:点击此处跳转文末名片获取

最简单的9行代码音乐播放器如下:

import time
import pygamefile = 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  root = tkinter.Tk()
root.title('音乐播放器')
root.geometry('460x600+500+100')
root.resizable(False,False) folder =''
res = []
num = 0
now_music = ''def buttonChooseClick():"""添加文件夹:return:"""global folderglobal resif not folder:folder = tkinter.filedialog.askdirectory()musics = [folder + '\\' + musicfor 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:returnglobal playingplaying = TruebuttonPlay['state'] = 'normal'buttonStop['state'] = 'normal'# python学习交流裙:660193417#pause_resume.set('播放')def play():"""播放音乐:return:"""if len(res):pygame.mixer.init()global numwhile 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 = 0else:num = num + 1netxMusic = netxMusic.split('\\')[1:]musicName.set('playing......' + ''.join(netxMusic))def buttonPlayClick():"""点击播放:return:"""buttonNext['state'] = 'normal'if pause_resume.get() == '播放':pause_resume.set('暂停')global folderif not folder:folder = tkinter.filedialog.askdirectory()if not folder:returnglobal playingplaying = Truet = threading.Thread(target=play)t.start()elif pause_resume.get() == '暂停':pygame.mixer.music.pause()pause_resume.set('继续')elif pause_resume.get() == '继续':pygame.mixer.music.unpause()pause_resume.set('暂停')def buttonStopClick():"""停止播放:return:"""global playingplaying = Falsepygame.mixer.music.stop()def buttonNextClick():"""下一首:return:"""global playingplaying = Falsepygame.mixer.music.stop()global numif len(res) == num:num = 0playing = Truet = threading.Thread(target=play)t.start()def closeWindow():"""关闭窗口:return:"""global playingplaying = Falsetime.sleep(0.3)try:pygame.mixer.music.stop()pygame.mixer.quit()except:passroot.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 playingplaying = Falsepygame.mixer.music.stop()global numif num == 0:num = len(res) - 2elif num == len(res) - 1:num -= 2else:num -= 2print(num)playing = Truet = 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)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()

效果展示

简易版的

在这里插入图片描述

半成品,代码没写完(诶嘿我懒)

在这里插入图片描述

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

相关内容

热门资讯

金凯生科:启鹭投资和青松投资拟... 新京报贝壳财经讯 6月4日,金凯生科公告,股东启鹭投资计划减持不超过361.2万股,占公司总股本3%...
出坑了,出坑了 出坑了,出坑了... 图: Eniko Katalin Ege 聊聊A股。 最近总体是横盘震荡,玩得挺开心,就是不挣钱。 ...
稳定币第一股上市在即!投资价值... 2025.06.04本文字数:3182,阅读时长大约6分钟作者 |第一财经 周艾琳加密货币圈近期大事...
消费者偏好兼具盈利持续性,“悦... 截至4日港股收盘,泡泡玛特(09992.HK)市值已经突破3000亿元人民币,老铺黄金(06181....
中国燃气重卡发动机:潍柴、康明... 燃气重卡在萎缩国内重型卡车的动力类型,主要划分为三大类,包括:柴油发动机、天然气发动机和新能源。在这...
枕套惊现医院标签!亚朵,一场“... 欢迎关注我的好朋友:闺蜜财经图片由AI生成撰文|杆姐&编辑|爱丽丝亚朵酒店的车翻得猝不及防。6月2日...
突然爆雷,总部被封!有人全家被... 订阅 快刀财经 ▲ 做您的私人商学院“不仅工作没了,家里所有钱也都投进去了,还欠着款。”作 者 :2...
千亿神话接连崩塌,闽系房企沉浮... 曾经富可敌国的闽系房企天团,如今几乎全军覆没,仅剩下一根独苗。神话破灭级的倒台,曾经规模起得有多快,...
合规“阴云”与增长困境笼罩,微... 出品|拾盐士作者|多面金融工作组2025年,是微众银行步入新十年征程的开局之年。然而在十年收官的紧要...
周六福通过港交所聆讯:去年利润... A股三度折戟后转战港股,周六福珠宝通过港股上市聆讯。据港交所6月3日披露,周六福珠宝股份有限公司 (...
埃斯顿:拟发行H股股票并在香港... 新京报贝壳财经讯 6月4日,埃斯顿公告,公司拟发行境外上市外资股(H股)股票并在香港联合交易所有限公...
迅雷斥资5亿收购虎扑,后者两度... 近日,纳斯达克上市公司深圳市迅雷网络技术有限公司(以下简称“迅雷”)发布公告称,其已完成对虎扑运营方...
明起停牌!002955、002... 今日晚间两家上市公司宣布筹划控制权变更事项,将于6月5日(星期四)开市起停牌,预计停牌时间不超过2个...
视频|巨子生物最新回应:相关产... 巨子生物今日在其官方账号公布了最新的检测结果,同时对1.0多平台下架给出解释。巨子生物在声明中提到:...
海底捞搞加盟:收两万份申请,却... 加盟这条路,海底捞刚刚踏出了第一步,能否彻底跑通,还言之尚早。文|《中国企业家》记者 梁宵编辑|米娜...
南华期货:公司发行H股股票并在... 6月4日晚间,南华期货股份有限公司(南华期货,603093.SH)发布股票交易异常波动公告,公司股票...
“70后苏商”夫妻卖电机,干出... 公司曾因“信息披露不规范”被罚。作者|刘俊群编辑|刘钦文北交所的下一个IPO候选人,是一对来自江苏常...
邦基科技:筹划重大事项,股票明... 6月4日晚间,山东邦基科技股份有限公司(邦基科技,603151.SH)公告,公司正在筹划以发行股份及...
22家ESG强信披券商全“交卷... 21世纪经济报道记者卢陶然 李德尚玉 北京报道监管要求之下,22家ESG强信披券商集体交出ESG答卷...