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()
# 还希望加上顺序播放,单曲循环 ,随机播放
# 总之,这是个简单的练手作品
|