5.17每日总结
import os import sys import pygame class MusicPlayer: def __init__(self, music_folder): self.music_folder = music_folder self.music_list = [] self.current_music_index = 0 self.is_paused = False self.volume = 0.5 self.search_str = "" # 初始化 Pygame Mixer pygame.mixer.pre_init(44100, -16, 2, 512) pygame.mixer.init() # 加载音乐列表 self.load_music_list() def load_music_list(self): """ 加载音乐文件列表 """ self.music_list = [] for file in os.listdir(self.music_folder): if file.endswith(".mp3"): filepath = os.path.join(self.music_folder, file) self.music_list.append(filepath) def play_music(self): """ 播放当前音乐 """ pygame.mixer.music.load(self.music_list[self.current_music_index]) pygame.mixer.music.set_volume(self.volume) pygame.mixer.music.play() def pause_music(self): """ 暂停或恢复当前音乐 """ self.is_paused = not self.is_paused if self.is_paused: pygame.mixer.music.pause() else: pygame.mixer.music.unpause() def set_volume(self, volume): """ 调节音量 """ self.volume = volume pygame.mixer.music.set_volume(volume) def next_music(self): """ 播放下一首音乐 """ self.current_music_index = (self.current_music_index + 1) % len(self.music_list) self.play_music() def search_music(self, search_str): """ 搜索音乐并播放 """ match_list = [] for i, filepath in enumerate(self.music_list): if search_str in os.path.basename(filepath): match_list.append(i) if not match_list: return False self.current_music_index = match_list[0] self.play_music() return True class MusicPlayerWindow: def __init__(self, width, height, title, music_folder): self.width = width self.height = height self.title = title self.music_folder = music_folder # 创建 Pygame 窗口 pygame.init() self.screen = pygame.display.set_mode((self.width, self.height)) pygame.display.set_caption(self.title) # 加载字体 self.font = pygame.font.SysFont("Arial", 18) # 创建音乐播放器 self.music_player = MusicPlayer(self.music_folder) self.music_player.play_music() def draw(self): """ 绘制窗口内容 """ # 清空屏幕 self.screen.fill((255, 255, 255)) # 绘制音乐文件夹名称 folder_text = self.font.render("Music Folder: " + self.music_folder, True, (0, 0, 0)) self.screen.blit(folder_text, (20, 20)) # 绘制当前音乐名称 current_music_text = self.font.render("Now Playing: " + os.path.basename(self.music_player.music_list[self.music_player.current_music_index]), True, (0, 0, 0)) self.screen.blit(current_music_text, (20, 60)) # 绘制暂停/恢复按钮 pause_text = "Pause" if not self.music_player.is_paused else "Resume" pause_button_text = self.font.render(pause_text, True, (0, 0, 0)) pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 100, 80, 30)) self.screen.blit(pause_button_text, (38, 108)) # 绘制音量调节条 volume_text = self.font.render("Volume: " + str(round(self.music_player.volume * 100)) + "%", True, (0, 0, 0)) self.screen.blit(volume_text, (20, 150)) pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 180, 200, 10)) pygame.draw.rect(self.screen, (0, 0, 0), pygame.Rect(20, 180, int(200 * self.music_player.volume), 10)) # 绘制下一首按钮 next_button_text = self.font.render("Next", True, (0, 0, 0)) pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 210, 80, 30)) self.screen.blit(next_button_text, (38, 218)) # 绘制搜索音乐输入框和按钮 pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 260, 200, 30)) search_text = self.font.render(self.music_player.search_str, True, (0, 0, 0)) self.screen.blit(search_text, (26, 266)) search_button_text = self.font.render("Search", True, (0, 0, 0)) pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(230, 260, 80, 30)) self.screen.blit(search_button_text, (248, 268)) # 显示更新后的画面 pygame.display.flip() def run(self): """ 运行主循环 """ while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.MOUSEBUTTONUP: # 暂停/恢复按钮点击事件 if pygame.Rect(20, 100, 80, 30).collidepoint(event.pos): self.music_player.pause_music() # 下一首按钮点击事件 elif pygame.Rect(20, 210, 80, 30).collidepoint(event.pos): self.music_player.next_music() # 搜索音乐按钮点击事件 elif pygame.Rect(230, 260, 80, 30).collidepoint(event.pos): self.music_player.search_music(self.music_player.search_str) elif event.type == pygame.KEYDOWN: # 监听搜索音乐输入框 if event.unicode.isalpha() or event.unicode.isdigit() or event.unicode == " ": self.music_player.search_str += event.unicode elif event.key == pygame.K_BACKSPACE: self.music_player.search_str = self.music_player.search_str[:-1] elif event.key == pygame.K_RETURN: if self.music_player.search_str: success = self.music_player.search_music(self.music_player.search_str) if not success: error_text = self.font.render("No matching music found!", True, (255, 0, 0)) self.screen.blit(error_text, (20, 300)) pygame.display.flip() pygame.time.wait(1000) self.music_player.search_str = "" elif event.type == pygame.MOUSEBUTTONDOWN: # 监听音量调节条 if pygame.Rect(20, 180, 200, 10).collidepoint(event.pos): click_pos = event.pos[0] - 20 self.music_player.set_volume(click_pos / 200) # 绘制窗口 self.draw() # 创建音乐播放器窗口实例 window = MusicPlayerWindow(640, 480, "Music Player", "Alimusic") # 运行窗口主循环 window.run()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix