MusicPlayer2.1版本

MusicPlayer2.1版本,第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()

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/717955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存