一、添加功能

歌曲自动随机循环播放,动态显示歌曲剩余时间和总时间,显示歌曲名字。

结局总是不尽人意,点完退出会以报错形式退出,但也算是成功退出了吧;而且程序可能有很多bug,在运行几次循环播放之后界面会变得很卡,而且tk的界面设计太不智能了,就像是在做底层!把tkinter学差不多了就学opencv+qt,听某人说这个更强大。

二、代码实现

import os
import random
from pygame import mixer
import time
import tkinter as tk
from tkinter import Button  #按钮控件;在程序中显示按钮
from tkinter import Label   #标签控件;可以显示文本和位图
from tkinter import Entry   #输入控件;用于显示简单的文本内容
from tkinter import Scale   #范围控件;显示一个数值刻度,为输出限定范围的数字区间
from tkinter import PhotoImage  #用于插入图片
from tkinter import messagebox   #用于显示你应用程序的消息框
from tkinter import Toplevel   #容器控件;用来提供一个单独的对话框,和Frame比较类似
from tkinter import StringVar   #字符串变量
from pymediainfo import MediaInfo  #用于读取歌曲时长
from PIL import ImageTk  #图像处理库
import re       #正则表达式
import threading  #子线程def name():   #检索文件夹下所有mp3文件名称filename = os.listdir(r"F:\python\project\assignment\music") #利用os.listdir检索文件夹下所有文件名称# print(filename)global musicmusic = []for music_name in filename:if '.mp3' in music_name:music.append(music_name)  #检索出mp3文件名字return music###音乐加载、播放、暂停、声音大小等操作
def music_begin(i):mixer.init()mixer.music.load(music[int(i)])#数据过大,不用多线程会崩溃
class time_music(threading.Thread):def __init__(self):super(time_music,self).__init__()self.daemon=Falsedef run(self):global i,flagmedia_info = MediaInfo.parse(music[int(i)])tk.Label(top,text=music[int(i)],font=("Helvetica", 16)).place(x=230,y=10)data = media_info.to_json()  # medio到json()这两行是获取文件的所有属性rst = re.search('other_duration.*?(.*?)min(.*?)s.*?', data)  # 扫描数据流t = int(rst.group(0)[19:20])r = int(rst.group(0)[-4:-2])m = (t * 60 + r) * 1000musictime = str(t) + ':' + str(r)tk.Label(top, text=musictime, font=("Helvetica", 16)).place(x=170, y=10)lbTime = tk.Label(top, anchor='w', font=("Helvetica", 16))  # anchor为方位点,w为西lbTime.place(x=110, y=10)for j in range(m // 1000):lbTime['text'] = '-{} /'.format((m // 1000) - j)time.sleep(1)while flag == 1:time.sleep(1)top.after(1000, music_random)def resume():global flagflag = 0def pause():global flagflag = 1def music_random():  #随机播放显示global i,top,loopi = random.randint(1, len(music))music_begin(i)mixer.music.play()thread = time_music()thread.start()def music_stop():global loopmixer.music.stop()mixer.music.unload()top.quit()def music_next():global ii += 1music_begin(i)mixer.music.play()thread = time_music()thread.start()def music_last():global ii -= 1music_begin(i)mixer.music.play()thread = time_music()thread.start()def music_louder():global loudloud += 0.1mixer.music.set_volume(loud)return louddef music_lower():global loudloud -= 0.1mixer.music.set_volume(loud)return louddef music_pause():mixer.music.pause()pause()def music_unpause():mixer.music.unpause()resume()###以上函数实现对音乐的操作,编程需注意全局变量在每一个函数里面都应该glabal声明###编辑播放器画面函数
def background():   #编辑画面背景global toptop = tk.Tk()# top.geometry()  #设置窗口的初始大小top.title("音乐播放器")v1 = StringVar()  #用tk.StringVar会报错,需要将tkinter中的StringVar调出  透明度变量def printsrceen(v1):  #调画面透明度函数t = int(v1)top.attributes("-alpha", t / 100)# 多线程练手# def update_time():    #获取当前时间函数#     def auto_update():#         current = time.strftime("%H:%M:%S")#         tk.Label(top, text="{0}".format(current), font=("Helvetica", 16)).place(x=10, y=10)#         time.sleep(1)##     t = threading.Thread(target=auto_update,daemon=True)  # 创建子线程进行实时显示#     t.start()#     top.after(500,update_time)  #500ms进行线程循环,实时性要求较高的话 可以将延时设小#添加背景图片photo = ImageTk.PhotoImage(file="背景.png")Label = tk.Label(top, text='人生不止有酒,还有诗和远方。',justify=tk.LEFT,image=photo,compound=tk.CENTER,font=("华文行楷",50),fg="white")Label.pack() #默认字在中间#添加按钮功能,美化按钮photo1 = ImageTk.PhotoImage(file="按钮背景.jpg")Button(top, text="暂停", command=music_pause,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=180, y=130)Button(top, text="随机播放", command=music_random,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=180, y=50)Button(top, text="下一首", command=music_next,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=300, y=130)Button(top, text="上一首", command=music_last,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=300, y=50)Button(top, text="继续", command=music_unpause,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=180, y=210)Button(top, text="停止", command=music_stop,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=180, y=290)Button(top, text="音量增", command=music_louder,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=300, y=210)Button(top, text="音量减", command=music_lower,width=91,height=51,image=photo1,compound=tk.CENTER,font=("宋体",15),fg="black").place(x=300, y=290)#按钮内容编辑函数和Label设置函数内容一致#设置透明度条w2 = Scale(top, from_=30, to=100, orient="horizontal", width=20,length=300, variable=v1,command=printsrceen, label="透明度")w2.place(x=550,y=700)# 设置实时时间显示def update_time():current = time.strftime("%H:%M:%S")tk.Label(top, text="{0}".format(current), font=("Helvetica", 16)).place(x=10, y=10)top.after(50,update_time)update_time()tk.mainloop()music = name()
i = j = l = 1
loud = 0.5
flag = 0
background()

三、个人感受

零基础上手做小项目真的挺难,有时间还是得先巩固python第三方库的基本知识,了解什么功能该用哪种库、怎么用等等。编程真的累死了快!!!

下次用到tk就来这里找音乐播放器!

用Python实现简易音乐播放器(mp3类型)3相关推荐

  1. 用Python实现简易音乐播放器(mp3类型)1

    一.实现方法 此音乐播放器设计主要运用了os.pygame等库安装包,os用于检索音乐文件名称,pygame用于实现音乐播放.暂停.切换等. 二.代码实现 import os import rando ...

  2. 用Python实现简易音乐播放器(mp3类型)2

    实现方法改编自"嘟嘟还没长大". 一.播放器功能 实现功能:具有播放器画面,有八个按钮实现功能,画面.按钮插入自制背景,并具有调整画面透明度的功能. 未实现功能:时间显示不能实现动 ...

  3. 【芝麻IP代理】如何利用Python实现简易音乐播放器

    [芝麻IP代理]Python图形界面 图形界面(GUI),即以图形方式显示计算机操作用户界面. Python支持第三方库来实现图形界面,例如Tk.wxWidgets及Qt等.其中,Python自带的库 ...

  4. Python极其简易音乐播放器

    #导入相应模块 from tkinter import * from tkinter import filedialog from tkinter import messagebox from pyg ...

  5. JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)

    JavaScript + Audio API自制简易音乐播放器(详细完整版) ** 音乐播放器的功能清单如下: ** 1.点击暂停按钮,歌曲暂停 2.点击播放按钮,歌曲播放 3.单曲循环与取消单曲循环 ...

  6. html实现简易音乐播放器

    目标: 使用vue.js导包的形式做一个简单的音乐播放器,新手也很容易看懂. 内容: 1. 使用了flex实现响应式布局: 2. 使用min-width防止字体被压缩: 3. 使用computed计算 ...

  7. Android Studio简易音乐播放器设计作业

    Android Studio简易音乐播放器设计作业 实验成功展示 实验代码 MainActivity.java XML文件 class文件 利用BroadcastReceiver模拟音乐播放器,实现播 ...

  8. ESP32 也能实现精美UI 使用 HaaS UI Lite (Python)打造音乐播放器

       音乐播放器是大家日常使用最多的工具之一,类似的音频播放场景还有在医院/银行经常见到的排队叫号系统.工业场景中常用的的操作提示装置等等. 1.简介    本文将基于HaaS UI Lite开发框架 ...

  9. 【微信小程序】简易音乐播放器,进度条拖拉、音乐的播放与暂停

    小程序简易音乐播放器实现 粗糙的页面设计: wxml部分: <view class="test"><view class="img">& ...

最新文章

  1. vue项目接口地址暴露_vue项目打包后可以配置接口地址的方法
  2. Geek的入门神器:micropython-能跑python的stm32开发板
  3. C++ 线程同步之临界区CRITICAL_SECTION
  4. CSharp设计模式读书笔记(10):装饰模式(学习难度:★★★☆☆,使用频率:★★★☆☆)...
  5. 从0开始架构一个IOS程序——03 — -分包用添加pch全局引用文件
  6. 关于setInterval设置倒计时只执行一次,clearInterval停止
  7. redis作用_Java高级架构笔记——实现故障恢复自动化:详解Redis哨兵技术
  8. 查看oracle数据库版本
  9. cakephp index.php,CakePHP - 中文手册
  10. qt 飞扬青云_Qt编写图片及视频TCP/UDP网络传输
  11. C语言生成负指数分布,泊松分布与负指数分布的关系
  12. cajviewer阅读器打不开怎么解决
  13. 密码学技术背后的计算困难性理论
  14. 宇宙背景声子低温超导探测器
  15. docker CLI官方教程 run方法解析(docer run 、docker attach 与 docker exec的区别)
  16. 【C语言练习——打印下三角及其变形】
  17. 计算机域名DNS设置,电脑设置和查看DNS域名服务器的技巧
  18. FTX与加密监管:真金白银的理想消亡史
  19. 【Proteus仿真】Arduino UNO+OLED12864 I2C接口跑图形库
  20. 浅谈电动汽车V2G系统中的漏电问题

热门文章

  1. node安装和node设置淘宝镜像
  2. 聊聊老歌----胎王小齐
  3. Tomcat 配置SSL证书
  4. Navicat导出数据库表设计文档
  5. 中创新航拟10月6日上市:天齐锂业与小鹏汽车为基石投资者
  6. opcache php 原理_php性能加速之opcache
  7. 给字符数组赋值java_给字符数组赋值的方法
  8. Vue3+vite使用 Highlight.js代码高亮实现网页代码显示
  9. MIPS流水线 流水线的冒险
  10. 【c语言】找出大于m的最小素数,并将其作为函数值返回