python做视频播放器,python3d相册制作视频教程
相册播放器(一个浏览多张图片的应用)大家应该都不陌生。本文将使用Python编写一个简单的相册播放器,有兴趣的可以了解一下。
大家好,我是小f。
相册播放器(一个浏览多张图片的应用)大家应该都不陌生。
当然还有视频和音乐播放器,也是用来播放多个视频和音乐文件的。
在Win10系统下,用【照片】打开一张图片,可以浏览图片所在文件夹中的其他图片。
从上图我们可以看到还有很多其他的功能,比如图像裁剪,编辑,打印。
今天小F就带大家学习一个用Python制作相册播放器的实用项目。
嗯,当然不如系统本身好。只是学习而已。
默认情况下,您可以每5秒钟切换一张图片。单击前进按钮快速切换到下一张图片。
主要使用Pygame库创建图形界面。
还有tkinter库,因为要添加图片文件夹,使用Tkinter的filedialog快速选择本地文件夹。
#安装
pip安装游戏
pip安装tkinter
好了,接下来给大家介绍一下。
导入相关库
导入操作系统
导入系统
导入全球
导入pygame
导入tkinter
导入os.path
从按钮导入按钮
从tkinter导入文件对话框
初始化,设置图形界面的宽度为1600,高度为900。
添加标题栏图表和标题栏文字,以及中文字体。这里用的是宋体,所以界面看起来有点丑。
最后设置文字背景色和背景图片
#初始化
pygame.init()
#设置宽度、高度和标题栏
宽度,高度=1600,900
SCREEN=pygame.display.set_mode((宽度,高度))
Pygame.display.set_caption(专辑播放器小F 2022 )
#添加中文字体
def bold_font(size):
os.chdir(sys.path[0])
返回py game . font . font( assets/sim hei . TTF ,size)
def regular_font(size):
返回pygame.font.SysFont(simhei ,size)
#设置文本背景颜色,背景图片
BASE_TEXT_COLOR=#6fffe9
BACKGROUND _ IMAGE=py game . IMAGE . load( assets/BACKGROUND . png )
SCREEN.blit(BACKGROUND_IMAGE,(0,0))
#更新
pygame.display.update()
#设置标题栏图标
WINDOW _ ICON=py game . image . load( assets/WINDOW _ ICON . png )
pygame . display . set _ ICON(WINDOW _ ICON)
效果如下,是空的。
加载部分按钮的图标
#设置按钮背景颜色、后退按钮、暂停按钮、播放按钮、前进按钮和加载新专辑按钮。
MAIN _ MENU _ BUTTON _ BACKGROUND=py game . image . load( assets/MAIN _ MENU _ BUTTON _ BG . png )
REWIND _ ICON _ SURFACE=py game . image . load( assets/REWIND _ ICON . png )
PAUSE _ ICON _ SURFACE=py game . image . load( assets/PAUSE _ ICON . png )
PLAY _ ICON _ SURFACE=py game . image . load( assets/PLAY _ ICON . png )
SEEK _ ICON _ SURFACE=py game . image . load( assets/SEEK _ ICON . png )
LOAD _ NEW _ ALBUM _ SURFACE=py game . 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()
根据鼠标点击情况, 是否点击右上角的关闭;
根据鼠标点击情况, 点击加载或关闭按钮;
当鼠标放置在按钮上, 按钮颜色发生改变,变成白色。点击关闭,应用会关闭掉。
最后是相册播放器的功能函数,设置每5s切换一张图片。
此外还要调整图片的尺寸大小,方便在播放器中查看
# 相册播放器功能函数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_image_index = rewind_button(current_image_index)
if SEEK_BUTTON.check_for_input(current_mouse_pos):
seek_button_pressed, current_image_index = seek_button(current_image_index, image_names)
if paused:
if PLAY_BUTTON.check_for_input(current_mouse_pos):
paused, unpaused = play_button()
else:
if PAUSE_BUTTON.check_for_input(current_mouse_pos):
paused, unpaused = pause_button()
if LOAD_NEW_ALBUM_BUTTON.check_for_input(current_mouse_pos):
load_button()
current_time = pygame.time.get_ticks()
# 切换图片, 一定时间、点击向后按钮、点击向前按钮、点击开始按钮
if current_time - previous_time >= COOLDOWN or rewind_button_pressed or seek_button_pressed or paused or unpaused:
unpaused = False
if current_image_index < len(image_file_paths)-1 and not seek_button_pressed and not rewind_button_pressed and not paused:
current_image_index += 1
SCREEN.blit(BACKGROUND_IMAGE, (0, 0))
REWIND_BUTTON.update(SCREEN)
if paused:
PLAY_BUTTON.update(SCREEN)
else:
PAUSE_BUTTON.update(SCREEN)
SEEK_BUTTON.update(SCREEN)
LOAD_NEW_ALBUM_BUTTON.update(SCREEN)
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)
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))
SCREEN.blit(photo_title_text_surface, photo_title_text_rect)
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))
SCREEN.blit(image_count_text_surface, image_count_text_rect)
pygame.display.update()
previous_time = pygame.time.get_ticks()
seek_button_pressed = False
rewind_button_pressed = False
同样也有监听鼠标点击事件,根据鼠标点击情况,做向前、向后、暂停、开始等切换图片操作。
最终效果如下
到此这篇关于基于Python制作一个相册播放器的文章就介绍到这了,更多相关Python相册播放器内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。