IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Python制作音乐播放器 -> 正文阅读

[游戏开发]Python制作音乐播放器

Python用tkinter库制作一个音乐播放器,自定义一个自己想要的播放器。虽然明天其他的播放器强大,如某易云,某狗。但是也是一个好玩的小插件。


1.制作需求


首先要会一点tkinter库的基础使用方法,当然其他gui库也行!这里只是博主这个废物不会其他gui库而用tkinter库来制作。其他的就是Python的一些基础操作而已。

这次播放音乐,博主使用pygame库的模块来制作音乐播放部分。因为这个模块支持很多音乐格式,而且不占用程序运行。用pip安装即可

pip install pygame

1.制作gui部分?

我们写制作gui部分,这样再去实现其他功能?

主体gui

"""
作者:PYmili
BUG请联系群:706128290
Python版本:3.9.7
"""
import tkinter as tk
import tkinter.messagebox
from tkinter import *
import tkinter.ttk
from PIL import ImageTk
from PIL import Image
import pygame
import time
import os
import re
import requests

"""
获取图片详细并处理
return: im
"""
def get_img(filename, width, height):
    im = Image.open(filename).resize((width, height))
    im = ImageTk.PhotoImage(im)
    return im

"""
窗口建立
"""
class gui:
    def __init__(self):
        #常用参数
        path,file=os.path.split(__file__)
        self.path=path
        self.file=file
        self.video={}
        self.tk=tk.Tk()
    def main(self):
        win=self.tk
        win.geometry("1000x563")
        win.resizable(False,False)
        win.title("藤和音乐播放器")
        win.iconbitmap("aum4e-67zg9-001.ico")
        win.iconbitmap()
        """
        背景图
        """
        canvas_root = tk.Canvas(win, width=1000, height=563)
        im_root = get_img(fr'{self.path}\img\20170924123431_RE8SX.png', 1000, 563)
        canvas_root.create_image(500, 277, image=im_root)
        canvas_root.pack()
        # VideoList
        videolist=Listbox(win,height=11, width=50)
        videolist.place(x=30,y=40)

        # Label
        tk.Label(win, text="输入文件完整路径:").place(x=1,y=1)
        # Entry
        var_path=tk.StringVar()
        filepath=tk.Entry(win, width=70, textvariable=var_path).place(x=120,y=1)

        win.mainloop()

大体gui就是一个有背景的窗口。有一个输入框用于获取用户输入的音乐文件夹。


按钮部分

 # Button
 get_video=Button(win, text="读取文件夹中所有歌曲", command=testing).place(x=80,y=250)
 play_video=Button(win, text="播放", command=play_video).place(x=35,y=250)
 delete_=Button(win, text="删除列表", command=delete_).place(x=1, y=300)
 for_play=Button(win, text="自动播放", command=for_play).place(x=1, y=350)
 urlvideo=Button(win, text="打开网络音乐播放器", command=url_gui).place(x=1, y=500)
 win.mainloop()

我们要做几个按钮来供用户操作。


主函数部分

"""
获取用户在输入框输入的文件夹路径
并且处理文件夹下所有音频文件并写入字典
在窗口的列表显示出来
"""
        # Entry
        var_path=tk.StringVar()
        filepath=tk.Entry(win, width=70, textvariable=var_path).place(x=120,y=1)

        
        def testing():
            if os.path.exists(var_path.get())==True:
                pathfile=var_path.get()
                videolists=[]
                for path,dirs,file in os.walk(pathfile):
                    if any(dirs) == False:
                        for fil in file:
                            videolists.append(path+f"\{fil}")
                    else:
                        for di in dirs:
                            for fil in file:
                                videolists.append(path+di+f"\{fil}")
                if any(videolists) == False:
                    apap=False
                else:
                    apap=videolists

            else:
                apap=None
            videolist.pack()
            video=[]
            mps=[]
            if apap == False:
                tk.messagebox.showinfo('提示', '你个笨蛋!你不会看你文件夹里面有没有文件吗!')
            elif apap == None:
                tk.messagebox.showinfo('提示', '你个笨蛋!你不会看你你的路径是否存在吗!')
            else:
                for vi in apap:
                    video.append(vi)
            yun=True
            for mp in video:
                file_ext=os.path.splitext(mp)[-1]
                #print(file_ext)
                if file_ext in ['.wav', '.mp3', '.ogg', '.flac', 'mp4a']:
                    mps.append(mp)
                else:
                    pass
            if yun == True:
                for mpp in mps:
                    p,f=os.path.split(mpp)
                    videolist.insert(END,f)
                    self.video[f]=mpp
                    videolist.place(x=30,y=40)
            else:
                tk.messagebox.showwarning("Error", "为识别到可播放文件")

"""
使用pygame播放音乐
"""
def play_video():
    lines=videolist.curselection()
    for line in lines:
        audio=self.video[videolist.get(line)]
        pygame.mixer.init()
        pygame.mixer.music.load(audio)
        pygame.mixer.music.play(2)
        pygame.mixer.music.get_busy()

"""
自动播放音乐部分
"""
def for_play():
    for key,msg in self.video.items():
        audio=self.video[key]
        try:
            pygame.mixer.init()
            pygame.mixer.music.load(audio)
            pygame.mixer.music.play(2)
            pygame.mixer.music.get_busy()
        except:
            continue

"""
删除音乐目录
"""
def delete_():
    for i in range(2000):
        videolist.delete(i,i)

最终成果及完整代码

源代码

藤和动漫.py

import tkinter as tk
import tkinter.messagebox
from tkinter import *
import tkinter.ttk
from PIL import ImageTk
from PIL import Image
import pygame
import time
import os
import re
import requests

import get_url_video as url_video

def get_img(filename, width, height):
    im = Image.open(filename).resize((width, height))
    im = ImageTk.PhotoImage(im)
    return im

def url_gui():
    root=tk.Tk()
    root.title("UrlVideo-请输入网络音乐完全地址")
    root.geometry("400x400")
    root.iconbitmap("aum4e-67zg9-001.ico")
    Label(root, text="URL地址:").place(x=60,y=1)
    var=tk.StringVar()
    url=Entry(root,textvariable=var).pack()
    def gets():
        _url_=var.get()
        try:
            path=url_video.get_url_video(_url_)
            Label(root, text="成功").pack()
            pygame.mixer.init()
            pygame.mixer.music.load(f"{path}")
            pygame.mixer.music.play(2)
            pygame.mixer.music.get_busy()
        except:
            Label(root, text="失败").pack()
    Button(root, text="播放", command=gets).pack()
    root.mainloop()

class gui:
    def __init__(self):
        path,file=os.path.split(__file__)
        self.path=path
        self.file=file
        self.video={}
        self.tk=tk.Tk()
    def main(self):
        win=self.tk
        win.geometry("1000x563")
        win.resizable(False,False)
        win.title("藤和音乐播放器")
        win.iconbitmap("aum4e-67zg9-001.ico")
        win.iconbitmap()
        """
        背景图
        """
        canvas_root = tk.Canvas(win, width=1000, height=563)
        im_root = get_img(fr'{self.path}\img\20170924123431_RE8SX.png', 1000, 563)
        canvas_root.create_image(500, 277, image=im_root)
        canvas_root.pack()
        # VideoList
        videolist=Listbox(win,height=11, width=50)
        videolist.place(x=30,y=40)

        # Label
        tk.Label(win, text="输入文件完整路径:").place(x=1,y=1)
        # Entry
        var_path=tk.StringVar()
        filepath=tk.Entry(win, width=70, textvariable=var_path).place(x=120,y=1)

        
        def testing():
            if os.path.exists(var_path.get())==True:
                pathfile=var_path.get()
                videolists=[]
                for path,dirs,file in os.walk(pathfile):
                    if any(dirs) == False:
                        for fil in file:
                            videolists.append(path+f"\{fil}")
                    else:
                        for di in dirs:
                            for fil in file:
                                videolists.append(path+di+f"\{fil}")
                if any(videolists) == False:
                    apap=False
                else:
                    apap=videolists

            else:
                apap=None
            videolist.pack()
            video=[]
            mps=[]
            if apap == False:
                tk.messagebox.showinfo('提示', '你个笨蛋!你不会看你文件夹里面有没有文件吗!')
            elif apap == None:
                tk.messagebox.showinfo('提示', '你个笨蛋!你不会看你你的路径是否存在吗!')
            else:
                for vi in apap:
                    video.append(vi)
            yun=True
            for mp in video:
                file_ext=os.path.splitext(mp)[-1]
                #print(file_ext)
                if file_ext in ['.wav', '.mp3', '.ogg', '.flac', 'mp4a']:
                    mps.append(mp)
                else:
                    pass
            if yun == True:
                for mpp in mps:
                    p,f=os.path.split(mpp)
                    videolist.insert(END,f)
                    self.video[f]=mpp
                    videolist.place(x=30,y=40)
            else:
                tk.messagebox.showwarning("Error", "为识别到可播放文件")

        def play_video():
            lines=videolist.curselection()
            for line in lines:
                audio=self.video[videolist.get(line)]
                pygame.mixer.init()
                pygame.mixer.music.load(audio)
                pygame.mixer.music.play(2)
                pygame.mixer.music.get_busy()

        def for_play():
            for key,msg in self.video.items():
                audio=self.video[key]
                try:
                    pygame.mixer.init()
                    pygame.mixer.music.load(audio)
                    pygame.mixer.music.play(2)
                    pygame.mixer.music.get_busy()
                except:
                    continue
        
        def delete_():
            for i in range(2000):
                videolist.delete(i,i)
        # Button
        get_video=Button(win, text="读取文件夹中所有歌曲", command=testing).place(x=80,y=250)
        play_video=Button(win, text="播放", command=play_video).place(x=35,y=250)
        delete_=Button(win, text="删除列表", command=delete_).place(x=1, y=300)
        for_play=Button(win, text="自动播放", command=for_play).place(x=1, y=350)
        urlvideo=Button(win, text="打开网络音乐播放器", command=url_gui).place(x=1, y=500)
        win.mainloop()

if __name__ in "__main__":
    g=gui()
    g.main()

get_url_video.py文件?

import requests
import os

def get_url_video(_url):
    r=requests.get(url=_url)
    if r.status_code == 200:
        path,file=os.path.split(__file__)
        urls,urlfile=os.path.split(_url)
        if os.path.exists(fr"{path}\video\{urlfile}") == False:
            with open(fr"{path}\video\{urlfile}", "wb")as f:
                f.write(r.content)
            return fr"{path}\video\{urlfile}"
        else:
            return fr"{path}\video\{urlfile}"
    else:
        return False

最终成果

?

?

?这个就是最终效果,虽然不怎么样.....但是还是实现了我们想要的功能,缺点是没有停止功能,下一首,上一首功能。

这个之后会添加大家可以加QQ群:706128290?关注更新或提交BUG!

群文件中会有文件源文件,而且博主打包了安装,程序可以直接安装到电脑上。

我是PYmili,喜欢就点个赞吧!下次再见!

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:33:05  更:2021-12-26 22:35:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:41:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码