iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python制作一个相册播放器
  • 690
分享到

基于Python制作一个相册播放器

2024-04-02 19:04:59 690人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

大家好,我是小F。 对于相册播放器,大家应该都不陌生(用于浏览多张图片的一个应用)。 当然还有视频、音乐播放器,同样是用来播放多个视频、音乐文件的。 在Win10系统下,用【照片】这

大家好,我是小F。

对于相册播放器,大家应该都不陌生(用于浏览多张图片的一个应用)。

当然还有视频、音乐播放器,同样是用来播放多个视频、音乐文件的。

在Win10系统下,用【照片】这个应用打开一张图片,就可以浏览该图片所在文件夹中其它图片了。

从上面的图中发现,还有不少其它方面的功能,比如图片裁剪、编辑、打印等。

今天小F就带大家学习一个python制作相册播放器的实战项目

功能嘛,当然没有系统自带的好,仅做学习哈。

默认5秒切换一张图片,点击向前按钮,可以快速切换到下一张图片。

主要使用到Pygame这个库,创建一个图形界面。

还有Tkinter库,因为要添加一个图片文件夹,使用tkinter的filedialog快速选取本地文件夹。

# 安装
pip install pygame
pip install tkinter

好了,接下来就给大家介绍一下。

导入相关库

import os
import sys
import glob
import pygame
import tkinter
import os.path
from button import Button
from tkinter import filedialog

初始化,设置图形界面的宽为1600,高为900。

添加标题栏图表和标题栏文字,以及中文字体,这里用宋体,所以界面显得有些丑...

最后设置文字背景色和背景图片

# 初始化
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()

根据鼠标点击情况, 是否点击右上角的关闭;

根据鼠标点击情况, 点击加载或关闭按钮;

当鼠标放置在按钮上, 按钮颜色发生改变,变成白色。点击关闭,应用会关闭掉。

最后是相册播放器的功能函数,设置每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相册播放器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Python制作一个相册播放器

本文链接: https://www.lsjlt.com/news/118522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Python制作一个相册播放器
    大家好,我是小F。 对于相册播放器,大家应该都不陌生(用于浏览多张图片的一个应用)。 当然还有视频、音乐播放器,同样是用来播放多个视频、音乐文件的。 在Win10系统下,用【照片】这...
    99+
    2024-04-02
  • c#基于winform制作音乐播放器
    目录AxWindowsMediaPlayer的方法1 首先新建一个页面 如图所示: 图片左侧是列表 使用listview 右侧是背景图片。图片框框的地方是后面可以实现的,+和-按钮分...
    99+
    2024-04-02
  • Python制作一个多功能音乐播放器
    目录一、制作播放器的思路二、制作播放器知识点和所需模块三、播放器的代码展示一、制作播放器的思路 制作一个多功能音乐播放器的思路 确定播放器的需求和功能,例如支持哪些音频格式、播放列表...
    99+
    2023-03-20
    Python 多功能音乐播放器 Pytho 音乐播放器
  • 基于Python实现本地音乐播放器的制作
    制作这个播放器的目的是为了将下载下来的mp3文件进行随机或是顺序的播放。选择需要播放的音乐的路径,选择播放方式,经过测试可以完美的播放本地音乐。 在开始之前介绍一个免费下载mp3音乐...
    99+
    2024-04-02
  • 基于Qt实现视频播放器的制作
    本篇博客介绍如何利用qMediaPlayer和qvideowidget实现视频文件(avi,mp4….)的播放,并且提供进度显示,还可以通过拖动进度条来变换播放位置。 ...
    99+
    2022-12-08
    Qt实现视频播放器 Qt 视频播放器 Qt 视频播放
  • 基于C++OpenCV制作电子相册查看器
    目录前言一、图片读取二、图片展示三、键盘控制四、效果显示五、源码总结前言 本文将使用OpenCV C++ 制作电子相册查看器。类似于win10系统的“照片”功...
    99+
    2024-04-02
  • 基于Vue3编写一个简单的播放器
    目录TODO实现播放/暂停实现开始/结束时间及开始时间和滚动条动态跟随播放动态变化实现点击进度条跳转指定播放位置实现点击圆点拖拽滚动条TODO 实现播放/暂停;实现开始/结束时间及开...
    99+
    2023-03-02
    Vue3实现播放器 Vue3播放器 Vue播放器
  • 基于Python制作一个文本翻译器
    translate非标准库是python中可以实现对多种语言进行互相翻译的库,使用时只需要设置目标语言(比如:中文、英文)后,会自动将原始文本翻译成我们需要的目标语言。 使用pip...
    99+
    2024-04-02
  • 基于JavaScript实现一个月饼音乐播放器
    目录前言页面布局页面背景左侧列表中间播放器右侧歌词部分总结前言 事情的经过是这样的,媳妇中秋发了一盒月饼,里面还有一个小蓝牙音响,她说如果这个音响是个月饼造型之类的是不是更能体现出中...
    99+
    2024-04-02
  • 基于Python制作一个桌面宠物
    目录获取素材图片窗体设置随机展示宠物图片添加动作右键菜单今天,我们来分享一个宠物桌面小程序,全程都是通过 PyQT 来制作的,对于 Python GUI 感兴趣的朋友,千万不要错过哦...
    99+
    2022-12-08
    Python实现桌面宠物 Python桌面宠物
  • 怎么使用Python制作一个多功能音乐播放器
    这篇文章主要介绍了怎么使用Python制作一个多功能音乐播放器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python制作一个多功能音乐播放器文章都会有所收获,下面我们一起来看看吧。一、制作播放器的思...
    99+
    2023-07-05
  • 利用java怎么制作一个视频播放器
    今天就跟大家聊聊有关利用java怎么制作一个视频播放器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。建立普通maven项目,添加vlcj的依赖 <dependency...
    99+
    2023-05-31
    java ava
  • 基于Python制作一个多进制转换工具
    目录前言主要步骤完整代码前言 学习资料下载链接 提取码:9d4g  进制转换计算工具含源文件 主要步骤 导入模块 import tkinter from tki...
    99+
    2024-04-02
  • HTML怎么制作一个简洁的音乐播放器
    这篇文章主要讲解了“HTML怎么制作一个简洁的音乐播放器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML怎么制作一个简洁的音乐播放器”吧!   这个...
    99+
    2024-04-02
  • 基于Python制作一个汇率换算程序
    目录1.汇率换算程序案例描述案例分析代码2.新增功能案例分析代码字符串索引3.增加功能案例描述案例分析代码1.汇率换算程序 案例描述 设计一个汇率换算器程序,其功能是将外币换算成人民...
    99+
    2024-04-02
  • 基于Matlab制作一个数独求解器
    目录1.完整效果2.数独求解(错误示范)3.数独求解(升维)4.数字识别5.GUI / APP讲解一个完整的小项目,顺便说明如何使用整数规划求解数独。 1.完整效果 2.数独求解...
    99+
    2024-04-02
  • 基于Python怎么实现音乐播放器
    本篇内容主要讲解“基于Python怎么实现音乐播放器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python怎么实现音乐播放器”吧!一、环境设置第一步引入必须的各类包import ...
    99+
    2023-06-30
  • 使用java怎么制作一个音乐播放器功能
    这期内容当中小编将会给大家带来有关使用java怎么制作一个音乐播放器功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体内容如下package baidu;import java.awt.*;impor...
    99+
    2023-05-31
    java ava
  • 基于Python制作一个文件解压缩工具
    经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件,以至于桌面上的压缩工具就有三四种,于是使用python做了一个包含各种常见格式的文件解压缩的...
    99+
    2024-04-02
  • 基于Python制作一个动物识别小程序
    目录 引言研究背景目的与意义 动物识别技术概述基本原理图像处理与特征提取机器学习与深度学习方法 数据集与数据预处理数据收集与构建数据预处理步骤数据增强技术 特征提取与选择基...
    99+
    2023-10-25
    python 开发语言 图像处理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作