import os
import sys
import glob
import pygame
import tkinter
import os.path
from button import Button
from tkinter import filedialog
# 初始化
pygame.init()
# 设置宽, 高, 标题栏
WIDTH, HEIGHT = 1600, 900
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("相册播放器 | 小F 2022")
# 添加中文字体
def bold_font(size):
os.chdir(sys.path[0])
return pygame.font.Font("assets/simhei.ttf", size)
def regular_font(size):
return pygame.font.SysFont("simhei", size)
# 设置文字背景色, 背景图片
BASE_TEXT_COLOR = "#6fffe9"
BACKGROUND_IMAGE = pygame.image.load("assets/background.png")
SCREEN.blit(BACKGROUND_IMAGE, (0, 0))
# 更新
pygame.display.update()
# 设置标题栏图标
WINDOW_ICON = pygame.image.load("assets/window_icon.png")
pygame.display.set_icon(WINDOW_ICON)
# 设置按钮背景色, 向后按钮, 暂停按钮, 播放按钮, 向前按钮, 加载新相册按钮
MAIN_MENU_BUTTON_BACKGROUND = pygame.image.load("assets/main_menu_button_bg.png")
REWIND_ICON_SURFACE = pygame.image.load("assets/rewind_icon.png")
PAUSE_ICON_SURFACE = pygame.image.load("assets/pause_icon.png")
PLAY_ICON_SURFACE = pygame.image.load("assets/play_icon.png")
SEEK_ICON_SURFACE = pygame.image.load("assets/seek_icon.png")
LOAD_NEW_ALBUM_SURFACE = pygame.image.load("assets/load_new_album_icon.png")
# 加载按钮函数
def load_button():
# 打开文件管理器, 选择文件夹
filedialogwindow = tkinter.Tk()
filedialogwindow.withdraw()
filepath = filedialog.askdirectory(title="选择你的相册")
filedialogwindow.destroy()
album_player(filepath)
# 关闭按钮
def quit_button():
pygame.quit()
sys.exit()
# 向后按钮
def rewind_button(current_image_index):
if current_image_index > 0:
current_image_index -= 1
rewind_button_pressed = True
return rewind_button_pressed, current_image_index
# 向前按钮
def seek_button(current_image_index, image_names):
if current_image_index+1 < len(image_names):
current_image_index += 1
seek_button_pressed = True
return seek_button_pressed, current_image_index
# 播放按钮
def play_button():
paused = False
unpaused = True
return paused, unpaused
# 暂停按钮
def pause_button():
paused = True
unpaused = False
return paused, unpaused
# 主界面
def main_menu():
# 主页标题栏
TITLE_TEXT_SURFACE = bold_font(120).render("相册播放器", True, BASE_TEXT_COLOR)
TITLE_TEXT_RECT = TITLE_TEXT_SURFACE.get_rect(center=(WIDTH/2, 175))
SCREEN.blit(TITLE_TEXT_SURFACE, TITLE_TEXT_RECT)
# 加载按钮
LOAD_BUTTON = Button(
surface=MAIN_MENU_BUTTON_BACKGROUND, pos=(WIDTH/2, 415), text_input="加载",
font=bold_font(100), base_color=BASE_TEXT_COLOR, hovering_color="white"
)
# 关闭按钮
QUIT_BUTTON = Button(
surface=MAIN_MENU_BUTTON_BACKGROUND, pos=(WIDTH/2, 585), text_input="关闭",
font=bold_font(100), base_color=BASE_TEXT_COLOR, hovering_color="white"
)
while True:
# 监听鼠标点击事件
current_mouse_pos = pygame.mouse.get_pos()
LOAD_BUTTON.update(SCREEN)
QUIT_BUTTON.update(SCREEN)
# 根据鼠标点击情况, 是否点击右上角的关闭
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 根据鼠标点击情况, 点击加载或关闭按钮
if event.type == pygame.MOUSEBUTTONDOWN:
if LOAD_BUTTON.check_for_input(current_mouse_pos):
load_button()
if QUIT_BUTTON.check_for_input(current_mouse_pos):
quit_button()
# 当鼠标放置在按钮上, 按钮颜色发生改变
LOAD_BUTTON.change_color(current_mouse_pos)
QUIT_BUTTON.change_color(current_mouse_pos)
pygame.display.update()
# 相册播放器功能函数
def album_player(folder_path):
SCREEN.blit(BACKGROUND_IMAGE, (0, 0))
image_file_paths = []
image_names = []
current_image_index = 0
paused = False
unpaused = False
seek_button_pressed = False
rewind_button_pressed = False
# 添加加载按钮后, 得到的图片文件夹路径
os.chdir(folder_path)
for file in glob.glob("*"):
current_image_path = f"{folder_path}/{file}"
# 图片路径列表
image_file_paths.append(current_image_path)
# 图片名称列表
image_names.append(file)
# 向后按钮
REWIND_BUTTON = Button(
surface=REWIND_ICON_SURFACE, pos=(WIDTH/2-100, HEIGHT-150), text_input="",
font=bold_font(100), base_color=BASE_TEXT_COLOR, hovering_color="white"
)
# 暂停按钮
PAUSE_BUTTON = Button(
surface=PAUSE_ICON_SURFACE, pos=(WIDTH/2, HEIGHT-150), text_input="",
font=bold_font(100), base_color=BASE_TEXT_COLOR, hovering_color="white"
)
# 播放按钮
PLAY_BUTTON = Button(
surface=PLAY_ICON_SURFACE, pos=(WIDTH/2, HEIGHT-150), text_input="",
font=bold_font(100), base_color=BASE_TEXT_COLOR, hovering_color="white"
)
# 向前按钮
SEEK_BUTTON = Button(
surface=SEEK_ICON_SURFACE, pos=(WIDTH/2+100, HEIGHT-150), text_input="",
font=bold_font(100), base_color=BASE_TEXT_COLOR, hovering_color="white"
)
# 加载新相册按钮
LOAD_NEW_ALBUM_BUTTON = Button(
surface=LOAD_NEW_ALBUM_SURFACE, pos=(WIDTH-325, HEIGHT-150), text_input="",
font=bold_font(100), base_color=BASE_TEXT_COLOR, hovering_color="white"
)
# 获取时间, 设置每5s切换一张图片
previous_time = pygame.time.get_ticks()
COOLDOWN = 5000
# 设置图片名称文字属性
photo_title_text_surface = bold_font(90).render(image_names[current_image_index], True, BASE_TEXT_COLOR)
photo_title_text_rect = photo_title_text_surface.get_rect(center=(WIDTH/2, 150))
# 图片张图显示
image_count_text_surface = regular_font(80).render(f"图片 {current_image_index+1}/{len(image_names)}", True, BASE_TEXT_COLOR)
image_count_text_rect = image_count_text_surface.get_rect(center=(300, 755))
# 获取图片宽高属性, 窗口显示不合适, 调整大小
new_image_surface = pygame.image.load(image_file_paths[current_image_index])
if new_image_surface.get_height() > 500:
new_image_surface = pygame.transform.scale(new_image_surface, (new_image_surface.get_width() * (500/new_image_surface.get_height()), 500))
elif new_image_surface.get_width() > 800:
new_image_surface = pygame.transform.scale(new_image_surface, (800, new_image_surface.get_height() * (800/new_image_surface.get_width())))
new_image_rect = new_image_surface.get_rect(center=(WIDTH/2, HEIGHT/2))
SCREEN.blit(new_image_surface, new_image_rect)
SCREEN.blit(photo_title_text_surface, photo_title_text_rect)
SCREEN.blit(image_count_text_surface, image_count_text_rect)
REWIND_BUTTON.update(SCREEN)
PAUSE_BUTTON.update(SCREEN)
SEEK_BUTTON.update(SCREEN)
LOAD_NEW_ALBUM_BUTTON.update(SCREEN)
pygame.display.update()
# 监听鼠标点击事件
while True:
for event in pygame.event.get():
# 根据鼠标点击情况, 是否点击右上角的关闭
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
# 根据鼠标点击情况, 做向前, 向后, 暂停, 开始等切换图片操作
current_mouse_pos = pygame.mouse.get_pos()
if REWIND_BUTTON.check_for_input(current_mouse_pos):
rewind_button_pressed, current
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
相册播放器.zip (24个子文件)
相册播放器
button.py 1KB
main.py 11KB
imgs
加油打工人.jpg 81KB
星空.jpg 84KB
日出.jpg 135KB
拒绝拖延.jpg 81KB
生机.jpg 106KB
努力搞钱.jpg 84KB
独行.jpg 137KB
日系.jpg 232KB
山峰之巅.jpg 131KB
鸡汤.jpg 24KB
赛博朋克.jpg 235KB
卡哇伊.jpg 20KB
微信图片_20220628215538.gif 1.19MB
assets
seek_icon.png 845B
background.png 1.2MB
main_menu_button_bg.png 2KB
simhei.ttf 9.3MB
window_icon.png 39KB
load_new_album_icon.png 2KB
rewind_icon.png 815B
pause_icon.png 210B
play_icon.png 817B
共 24 条
- 1
资源评论
- liyunze03212023-05-25这个资源值得下载,资源内容详细全面,与描述一致,受益匪浅。
python慕遥
- 粉丝: 1994
- 资源: 230
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现用有限元法计算电磁场的Matlab工具 .rar
- 基于matlab实现有限元算法 计算电磁场问题 边界条件包括第一类边界和第二类边界.rar
- 基于matlab实现用于计算不同车重下的电动汽车动力性和经济性.rar
- 基于matlab实现遗传算法求解多车场车辆路径问题 有多组算例可以用.rar
- 浏览器.apk
- 基于matlab实现是一个matlab中的power system 中搭建的一个模型
- 基于JSP毕业设计-教学管理系统(源代码+论文).zip
- 基于JSP毕业设计-家政管理系统-毕业设计.zip
- 基于Python实现淘宝商品评论采集(含逆向)源代码
- 基于matlab实现多目标进化算法NSGAⅡ&Matlab讲解.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功