热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python做视频播放器,python3d相册制作视频教程

python做视频播放器,python3d相册制作视频教程相册播放器(一个浏览多张图片的应

  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

   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

   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软件开发工作室!



推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Python异常的捕获、传递与抛出操作,并提供了相关的操作示例。通过异常的捕获和传递,可以有效处理程序中的错误情况。同时,还介绍了如何主动抛出异常。通过本文的学习,读者可以掌握Python中异常处理的基本方法和技巧。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Python教程分享:使用plt.text给图中的点加标签,让Python画图更生动
    背景:今天在用matplotlib模块画各城市2019-ncov疫情确诊人数和节前流入人口数的图的时候遇到了要给图中的点加上标签示意,原本图长这个样子现在要给各散点标注是哪个哪个城 ... [详细]
author-avatar
弱柳纤纤_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有