使用python tkinter实现打开选择音乐、音乐单曲循环,列表循环,随机播放。
时间: 2024-02-01 16:17:04 浏览: 248
好的,以下是一个简单的示例代码,可以实现打开选择音乐、音乐单曲循环,列表循环,随机播放的功能:
```python
import tkinter as tk
from tkinter import filedialog
import pygame
import random
class MusicPlayer:
def __init__(self, master):
self.master = master
self.master.title("Music Player")
# 初始化pygame
pygame.init()
# 初始化音乐播放器
self.playlist = []
self.current_song = 0
self.mode = "list" # 播放模式:单曲循环、列表循环、随机播放
self.playing = False
# 创建GUI界面
self.create_gui()
def create_gui(self):
# 创建选择文件按钮
self.select_button = tk.Button(self.master, text="选择文件", command=self.select_file)
self.select_button.pack()
# 创建播放按钮
self.play_button = tk.Button(self.master, text="播放", command=self.play)
self.play_button.pack()
# 创建暂停按钮
self.pause_button = tk.Button(self.master, text="暂停", command=self.pause)
self.pause_button.pack()
# 创建停止按钮
self.stop_button = tk.Button(self.master, text="停止", command=self.stop)
self.stop_button.pack()
# 创建单曲循环按钮
self.single_button = tk.Button(self.master, text="单曲循环", command=self.set_single_mode)
self.single_button.pack()
# 创建列表循环按钮
self.list_button = tk.Button(self.master, text="列表循环", command=self.set_list_mode)
self.list_button.pack()
# 创建随机播放按钮
self.random_button = tk.Button(self.master, text="随机播放", command=self.set_random_mode)
self.random_button.pack()
def select_file(self):
# 打开文件选择对话框
filetypes = (("MP3 files", "*.mp3"), ("All files", "*.*"))
file_path = filedialog.askopenfilename(title="Select file", filetypes=filetypes)
# 将所选文件添加到播放列表中
if file_path:
self.playlist.append(file_path)
def play(self):
# 如果当前没有音乐在播放,则播放第一首歌曲
if not self.playing:
self.play_song(self.playlist[self.current_song])
self.playing = True
# 如果当前有音乐在播放,则恢复播放
else:
pygame.mixer.music.unpause()
def pause(self):
# 暂停音乐播放
pygame.mixer.music.pause()
def stop(self):
# 停止音乐播放
pygame.mixer.music.stop()
self.playing = False
def set_single_mode(self):
# 设置为单曲循环模式
self.mode = "single"
def set_list_mode(self):
# 设置为列表循环模式
self.mode = "list"
def set_random_mode(self):
# 设置为随机播放模式
self.mode = "random"
def play_song(self, file_path):
# 加载音乐文件
pygame.mixer.music.load(file_path)
# 播放音乐
pygame.mixer.music.play()
# 监听音乐播放结束事件
pygame.mixer.music.set_endevent(pygame.USEREVENT)
# 监听音乐播放结束事件的处理函数
def handle_music_end_event(event):
if self.mode == "single":
# 单曲循环模式,重新播放当前歌曲
self.play_song(self.playlist[self.current_song])
elif self.mode == "list":
# 列表循环模式,播放下一首歌曲
self.current_song = (self.current_song + 1) % len(self.playlist)
self.play_song(self.playlist[self.current_song])
elif self.mode == "random":
# 随机播放模式,随机播放一首歌曲
self.current_song = random.randint(0, len(self.playlist) - 1)
self.play_song(self.playlist[self.current_song])
# 绑定音乐播放结束事件的处理函数
pygame.mixer.music.set_endevent(pygame.USEREVENT)
self.master.bind(pygame.USEREVENT, handle_music_end_event)
if __name__ == "__main__":
root = tk.Tk()
player = MusicPlayer(root)
root.mainloop()
```
在上述代码中,我们使用了pygame库来实现音乐播放功能,使用filedialog库来打开文件选择对话框,使用tkinter库来创建GUI界面。我们定义了一个MusicPlayer类来管理音乐播放器的状态和行为,其中包括:初始化pygame,创建GUI界面,选择音乐文件,播放音乐,暂停音乐,停止音乐,设置播放模式等操作。最后,在程序入口处创建一个Tkinter窗口,并实例化MusicPlayer类,启动程序。
阅读全文