版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/enland_lan/article/details/99939491

Python 实现图片轮播及音乐循环播放
使用说明
项目目录结构
生成 exe 文件
源代码
本项目实现的功能(简易的音乐电子相册):

每 5s 自动播放下一张图片
可以手动点击,播放下一张图片
循环播放 MP3 音乐文件
使用说明
需将文件夹 photo 和 music 以及最终执行的 album.exe 文件放到同一目录下,双击运行 album.exe 即可。

注意至少在 photo 文件夹下包含一张图片才能正常运行 album.exe
music 文件夹存放所要循环播放的 MP3 文件,如果不需要播放音乐,也可直接删除 music 文件夹
这里没有实现获取 photo 目录下的子目录的图片。主要考虑到照片太多的话,每次自动播放都从第一张图片开始,后面的图片可能需要很久才能播放,这可能不太友好
项目目录结构
(eln35) C:\Users\eln\PycharmProjects\Album>tree
文件夹 PATH 列表
卷序列号为 209A-F77C
C:.
│  album.exe    # 最终生成的 exe 文件,从 dist 文件夹中复制出来
│  album.py     # 源代码
│  README.html  # 从 README.md 生成的网页
│  README.md    # 说明文档
├─.idea        # PyCharm 中新建项目时自动生成的文件夹,用于存放项目的配置信息。其中包括版本控制信息、历史记录等等
│  └─inspectionProfiles
├─build        # 生成 exe 文件时自动生成的
│  └─album
├─dist         # 生成 exe 文件时自动生成的,最终的生成 exe 文件保存在这里
├─music        # 测试用的音乐文件(没有该路径也不影响运行)
│      Kalimba.mp3
│      Maid with the Flaxen Hair.mp3
│      Sleep Away.mp3

├─photo        # 测试用的图片(必须包含一张图片)
│      Chrysanthemum.jpg
│      Desert.jpg
│      Hydrangeas.jpg
│      Jellyfish.jpg
│      Koala.jpg
│      Lighthouse.jpg
│      Penguins.jpg
│      Tulips.jpg

└─__pycache__   # python 运行的缓存文件夹,自动生成

生成 exe 文件
安装 python 的 pyinstaller 库:

(eln35) C:\Users\eln\PycharmProjects\Album>pip install pyinstaller
1
生成 exe 文件:

(eln35) C:\Users\eln\PycharmProjects\Album>rmdir /s /q dist
(eln35) C:\Users\eln\PycharmProjects\Album>rmdir /s /q build(eln35) C:\Users\eln\PycharmProjects\Album>pyinstaller -F -w album.py

-w 直接发布的 exe 应用带命令行调试窗口,在指令内加入 -w 命令可以屏蔽
-F 注意指令区分大小写。这里是大写。使用 -F 指令可以把应用打包成一个独立的 exe 文件,否则是一个带各种 dll 和依赖文件的文件夹
-p 这个指令后面可以增加 pyinstaller 搜索模块的路径。因为应用打包涉及的模块很多。这里可以自己添加路径。不过经过笔者测试, site-packages 目录下都是可以被识别的,不需要再手动添加
源代码

# -*- coding: utf-8 -*-"""
Created on 2019/8/20@author: eln@requirements: PyCharm 2017.2; Python 3.5.6 |Anaconda 4.1.1 (64-bit)@decription: 用 Python 制作一个电子相册
"""
# pip install pillow pygame mutagen
import os
import sys
import threading
import tkinter as tk
import time
from PIL import ImageTk, Image
import pygame
from mutagen.mp3 import MP3def playmusic():"""播放音乐。"""Path = r'music\\'try:list1 = os.listdir(Path)  # 获取指定路径下所有的 mp3 文件for x in list1:if not (x.endswith('.mp3')):list1.remove(x)list2 = []for i in list1:s = os.path.join(Path, i)  # 对路径与文件进行拼接list2.append(s)while True:for n in list2:# 获取每一首歌的时长path = naudio = MP3(n)pygame.mixer.init()  # 初始化所有引入的模块pygame.mixer.music.load(path)  # 载入音乐,音乐可以是 ogg、mp3 等格式pygame.mixer.music.play()  # 播放载入的音乐time.sleep(int(audio.info.length))  # 获取每一首歌曲的时长,使程序存活的时长等于歌曲时长except Exception as e:print("Exception: %s" % e)resolution = (1366, 768)  # 分辨率
Path = r'photo\\'  # 相册路径
Interval = 5  # 播放间隔.单位:s
Index = 0  # 当前照片计数
title = "图片播放"  # 窗口标题def getfiles():"""获取图片文件名。"""files = os.listdir(Path)for x in files:if not (x.endswith('.jpg') or x.endswith('.JPG') or x.endswith('.png')):files.remove(x)return filesfiles = getfiles()
print(files)
scaler = Image.ANTIALIAS  # 设定 ANTIALIAS ,即抗锯齿
root = tk.Tk()  # 创建窗口
root.title(title)  # 设置窗口标题w, h = root.maxsize()
root.geometry("{}x{}".format(w, h)) #看好了,中间的是小写字母ximg_in = Image.open(Path + files[0])  # 加载第一张图片
# img_in = Image.open("load.jpg")  # 加载第一张图片
w, h = img_in.size  # 获取图片大小
size_new = (int(w * resolution[1] / h), resolution[1])
img_out = img_in.resize(size_new, scaler)  # 重新设置大小
img = ImageTk.PhotoImage(img_out)  # 用 PhotoImage 打开图片
panel = tk.Label(root, image=img)  # Label 自适应图片大小
panel.pack(side="bottom", fill="both", expand="yes")def callback(e):"""手动切换图片。"""try:global Indexfor i, x in enumerate(files):# 判断文件是否存在if not os.path.isfile(Path + '%s' % x):breakif i != Index:  # 跳过已播放的图片continueprint('手动处理图片', x, Index)  # python 3.5# print(unicode('手动处理图片 %s %d' % (x, Index), "utf8", errors="ignore"))  # python 2.7.15img_in = Image.open(Path + '%s' % x)print(img_in)w, h = img_in.sizesize_new = (int(w * resolution[1] / h), resolution[1])img_out = img_in.resize(size_new, scaler)img2 = ImageTk.PhotoImage(img_out)panel.configure(image=img2)panel.image = img2Index += 1if Index >= len(files):Index = 0breakexcept Exception as e:print("Exception: %s " % e)sys.exit(1)# root.bind("<Return>", callback)
root.bind("<Button-1>", callback)  # 点击窗口切换下一张图片def image_change():"""自动切换图片。"""try:global Indextime.sleep(3)while True:for i, x in enumerate(files):# 判断文件是否存在if not os.path.isfile(Path + '%s' % x):breakif i != Index:  # 跳过已播放的图片continueprint('自动处理图片', x, Index)  # python 3.5# print(unicode('自动处理图片 %s %d' % (x, Index), "utf8", errors="ignore"))  # python 2.7.15img_in = Image.open(Path + '%s' % x)w, h = img_in.sizesize_new = (int(w * resolution[1] / h), resolution[1])img_out = img_in.resize(size_new, scaler)img2 = ImageTk.PhotoImage(img_out)panel.configure(image=img2)panel.image = img2Index += 1if Index >= len(files):Index = 0time.sleep(Interval)except Exception as e:print("Exception: %s " % e)sys.exit(1)m = threading.Thread(target=playmusic)  # 创建音乐播放线程
t = threading.Thread(target=image_change)  # 创建图片切换线程
# python 可以通过 threading module 来创建新的线程,然而在创建线程的线程(父线程)关闭之后,相应的子线程可能却没有关闭
# 需要把 setDaemon 函数放在 start 函数前面解决此问题
m.setDaemon(True)
m.start()  # 启动线程
t.start()  # 启动线程root.mainloop()  # 窗口循环

————————————————
版权声明:本文为CSDN博主「eln」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/enland_lan/article/details/99939491

Python 实现图片轮播及音乐循环播放相关推荐

  1. 多图片每隔2S循环播放

    这算是自己的第一篇博文吧,记录下关于web的学习路程,虽然在别人眼里平淡无奇,不过我能力有限,一步步慢慢来-- 因为自己的疏忽与大意,急于把自己的代码精简,却没有去测试是否实现了代码原来的功能,造成之 ...

  2. MediaPlayer 之音乐循环播放器

    先说以下开发环境:Android sdk 2.2   target:android-8 AndroidManifest.xml: Java代码   <?xml version="1.0 ...

  3. Flash:关键帧中调用自建的音乐类,进行播放、关闭、循环音乐+按键播放或者关闭外部音乐+循环播放背景音乐+播放按钮音乐+停止+加载外部音乐文件+AS2播放背景音乐

    目录 一.关键帧里面:调用自建的音乐类, 循环播放外部音乐.进行播放.关闭.循环音乐 1.代码:自建音乐类 2.关键帧中创建.播放.暂停背景音乐+按钮音乐 3.文件布置 二.关键帧中:按键播放或者关闭 ...

  4. python +tkinter 打造网易云音乐下载播放器

    先上图],本次爬取得是网易云音乐,因为接口很方便,还没试百度云音乐, 提供2种下载方式,单曲下载和url歌单链接批量下载,自动识别单曲或者是歌单链接,[正则表达式匹配] 由于搜索单曲,歌曲列表经过筛选 ...

  5. python实现游戏背景滚动(图片轮播)

    目录 图片轮播 轮播效果 效果实现分析 游戏背景制作 背景效果 效果实现分析 一.python实现图片轮播 1.1 轮播效果 1.2 效果实现分析 1.2.1 pycharm导入pygame模块 开始 ...

  6. 原生Js_简易图片轮播模板

    功能:图片自动循环轮播,通过点击"上一张","下一张"按钮来控制图片的切换 <!DOCTYPE html> <html><head ...

  7. Python OpenCV _1基本操作(画图,循环播放图像,鼠标事件,读取中文路径中的图片)

    此系列源码在我的GitHub里:https://github.com/yeyujujishou19/Python-OpenCV 一,OpenCV的结构 A)根据功能和需求的不同,OpenCV中的函数接 ...

  8. html5图片无限循环播放,原生js实现无限循环轮播图效果

    知识要点 1.实现无限循环的原理: 以偏移的距离来判断是否跳回第一张和最后一张 也可以利用循环判断图片的当前索引值 var newLeft=parseInt(list.style.left)+offs ...

  9. 使用JavaScript实现图片轮播,上一张后一张,循环播放

    轮播图在前端页面中经常用到,包括PC端和移动端. 我所写的轮播图的方法是在页面中设计好一张图片的位置,并且加上按钮"上一张","下一张","循环播放& ...

最新文章

  1. Java 计算学生的平均成绩
  2. 华硕首款平板电脑周五开售
  3. c语言字符型计算器,求用c语言编程四则混合运算计算器?
  4. 丽水数据可视化设计价格_B端产品设计数据可视化图表选择篇
  5. MSSQL调优实战一 乱建聚集索引的后果
  6. 从头来之【iOS及历史版本特性介绍】
  7. MySQL 大表优化方案(长文)
  8. Android实现多条Toast快速显示(强制中止上一条Toast的显示)
  9. python约瑟夫环单向循环链表_用单向循环链表解决约瑟夫环(Joseph)问题
  10. Matlab晶闸管单相全桥电路仿真
  11. 闭环系统辨识matlab,系统辨识-12-闭环辨识
  12. 电商数据分析的4大思维和8类指标
  13. 【大数据公司研究】第三方大数据公司是如何赚钱的,以个推公司为例
  14. excel如何把顺序倒过来_excel表格怎么把字倒过来
  15. 办公小技巧:excel列宽在哪里设置
  16. Pytorch房价预测
  17. 流体力学-----连续性方程的推导和理解
  18. hdu4416——后缀自动机
  19. SkyWalking调研与初步实践
  20. seo每日一贴_?新手如何自学SEO,教程、书籍、工具推荐

热门文章

  1. 练习:利用函数实现一个登陆系统
  2. ThinkPHP5 相关知识重点笔记
  3. php ci nginx 伪静态rewrite配置方法
  4. CodeForces - 434D Nanami's Power Plant
  5. 糖尿病(消渴)的中药简见简方(转载)
  6. Android 线程 thread 两种实现方法!
  7. MSSQL用户映射,服务器角色
  8. linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
  9. GoogLeNet代码解读
  10. 二十万字C/C++、嵌入式软开面试题全集宝典六