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知识库 -> MusicPlayer2.1版本 -> 正文阅读

[Python知识库]MusicPlayer2.1版本

MusicPlayer2.0版本

python小制作 tkinter 简单音乐播放器_死非死的博客-CSDN博客

感觉自己在挤牙膏,水文章,但是确确实实改变了啊,而且这是两天分别改滴

本次修改

1.上次提到的name参数问题

2.那个可以被淘汰掉的 player()函数

3. put_up 函数改成了类方法

至于? 类减负,没有;? ?随机播放,没有;? ?随机壁纸,还是没有,? 噫~~

import os
import random
from tkinter import *

from PIL import Image, ImageTk  # 导入图像处理函数库
from pygame import mixer


class MyButton:
    def __init__(self, window):  #
        self.window = window
        self.font = ('宋体', 12)
        self.width = 8
        self.bg = '#c7e0f4'

    def put_button(self, text, command, x, y):
        Button(self.window, text=text,
               font=self.font, command=command,
               width=self.width,
               bg=self.bg).place(x=x, y=y)


class MusicPlayer:
    def __init__(self, width='350', height='300'):
        self.width, self.height = width, height
        self.num = 0
        self.size = 0.5
        self.window = Tk()  # 创建一个窗口
        self.name = StringVar()

    @staticmethod
    def music_list():  # 读取音乐  完善方向是加上排序功能
        lists = []  # music是音乐文件夹 os.listdir 打开指定文件夹获取文件夹下所有文件名称
        for i in os.listdir('music'):
            if os.path.splitext(i)[-1] == '.mp3':
                lists.append(i)
            else:
                pass
        return lists

    def put_tp(self):
        """放置Label"""
        # self.name.set(f'{Mp.name_now()}')
        self.update(self.name_now())
        back_img = read_img(window_w, window_h)
        tpi1 = Label(self.window, compound=CENTER,  # 用于显示当前音乐名称
                     textvariable=self.name,
                     image=back_img,
                     fg='#2598cb',
                     font=('黑体', 20))
        # 背景图片 在这里我将背景图片和音乐名称共用一个标签 因为没找到将标签背景透明的办法
        tpi1.image = back_img
        tpi1.pack()

    def update(self, name):
        self.name.set(name)

    def name_now(self):  # 当前播放音乐名称
        name1 = self.music_list()[self.num]
        self.update(name1)
        return name1

    def play(self):  # 开始播放音乐
        mixer.music.set_volume(self.size)
        mixer.music.load(f'music/{self.name_now()}')
        mixer.music.play()

    @staticmethod
    def stop():  # 音乐暂停
        mixer.music.pause()

    @staticmethod
    def cancel():
        """取消暂停"""
        mixer.music.unpause()

    def up(self):
        """控制音乐音量 增大"""
        if -0.1 < self.size < 1:
            self.size += 0.1
            mixer.music.set_volume(self.size)
        else:
            self.size += 0
            mixer.music.set_volume(self.size)

    def down(self):
        """控制音乐音量 降低"""
        if 0 < self.size < 1.1:
            self.size -= 0.1
            mixer.music.set_volume(self.size)
        else:
            self.size -= 0
            mixer.music.set_volume(self.size)

    def next(self):
        """切换音乐 上一首"""
        mixer.music.stop()
        if 0 <= self.num <= len(self.music_list()) - 2:
            self.num += 1
        elif self.num >= len(self.music_list()) - 1:
            self.num = 0
        self.name_now()
        # self.name.set(self.name_now())
        self.play()

    def last(self):
        """切换音乐 下一首"""
        mixer.music.stop()
        if 0 < self.num <= len(self.music_list()) - 1:
            self.num -= 1
        elif self.num <= 0:
            self.num = len(self.music_list()) - 1
        # self.name.set(self.name_now())
        self.name_now()
        self.play()

    def player_window(self, x='500', y='150'):

        # window_w,window_h = '350', '300'  # 窗口宽窗口高
        mixer.init()  # 初始化音乐播放器
        window_size = self.width + 'x' + self.height
        window_p = f"+{x}+{y}"  # 窗口出现的位置

        self.window.title('赵某的音乐播放器')  # 标题
        self.window.geometry(window_size + window_p)  # 窗口的大小 以及位置 放置窗口
        # 设定窗口是否可以缩放,以及缩放范围
        # name = StringVar()
        self.window.resizable(width=False, height=False)
        self.put_tp()


def buttons(mp):
    """按钮总部"""
    text = ['播放', '暂停', '继续播放', '上一首', '下一首', '音量+', '音量-']
    bottom_num = len(text)
    button1 = MyButton(mp.window)

    command = [mp.play, mp.stop, mp.cancel,
               mp.next,
               mp.last, mp.up,
               mp.down]
    x = list(range(20, 221, 80)) + list(range(20, 301, 80))
    y = list(range(200, 241, 40))

    for i in range(bottom_num):
        if i < 3:
            button1.put_button(text=text[i], command=command[i], x=x[i], y=y[0])
        else:
            button1.put_button(text=text[i], command=command[i], x=x[i], y=y[1])


def read_img(width, height):
    img_list = os.listdir('壁纸')
    img_num = random.randint(0, len(img_list) - 1)
    img = ImageTk.PhotoImage(Image.open(
        f'壁纸/{img_list[img_num]}')
                             .resize((int(width), int(height))))
    return img


if __name__ == "__main__":
    window_w, window_h = '350', '300'  # 窗口宽窗口高
    Mp = MusicPlayer(window_w, window_h)
    Mp.player_window()
    buttons(Mp)  # 调用上方函数 ,放置按钮
    Mp.window.mainloop()

    # 还希望加上顺序播放,单曲循环 ,随机播放
    # 总之,这是个简单的练手作品

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:24:12  更:2022-04-24 09:26:24 
 
开发: 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 17:35:53-

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