儿童会有有白巅峰吗 http://m.39.net/baidianfeng/a_7189464.html
对于相册播放器,大家应该都不陌生(用于浏览多张图片的一个应用)。
当然还有视频、音乐播放器,同样是用来播放多个视频、音乐文件的。
在Win10系统下,用这个应用打开一张图片,就可以浏览该图片所在文件夹中其它图片了。
从上面的图中发现,还有不少其它方面的功能,比如图片裁剪、编辑、打印等。
今天小F就带大家学习一个Python制作相册播放器的实战项目。
功能嘛,当然没有系统自带的好,仅做学习哈。
默认5秒切换一张图片,点击向前按钮,可以快速切换到下一张图片。
主要使用到Pygame这个库,创建一个图形界面。
还有Tkinter库,因为要添加一个图片文件夹,使用tkinter的filedialog快速选取本地文件夹。
#安装pipinstallpygamepipinstalltkinter
好了,接下来就给大家介绍一下。
导入相关库。
importosimportsysimportglobimportpygameimporttkinterimportos.pathfrombuttonimportButtonfromtkinterimportfiledialog
初始化,设置图形界面的宽为,高为。
添加标题栏图表和标题栏文字,以及中文字体,这里用宋体,所以界面显得有些丑...
最后设置文字背景色和背景图片。
#初始化pygame.init()#设置宽,高,标题栏WIDTH,HEIGHT=,SCREEN=pygame.display.set_mode((WIDTH,HEIGHT))pygame.display.set_caption("相册播放器
小F")#添加中文字体defbold_font(size):os.chdir(sys.path[0])returnpygame.font.Font("assets/simhei.ttf",size)defregular_font(size):returnpygame.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")
设置按钮背景色,向后按钮,暂停按钮,播放按钮,向前按钮,加载新相册按钮。
其次定义各个按钮的功能函数。
#加载按钮函数defload_button():#打开文件管理器,选择文件夹filedialogwindow=tkinter.Tk()filedialogwindow.withdraw()filepath=filedialog.askdirectory(title="选择你的相册")filedialogwindow.destroy()album_player(filepath)#关闭按钮defquit_button():pygame.quit()sys.exit()#向后按钮defrewind_button(current_image_index):ifcurrent_image_index0:current_image_index-=1rewind_button_pressed=Truereturnrewind_button_pressed,current_image_index#向前按钮defseek_button(current_image_index,image_names):ifcurrent_image_index+1len(image_names):current_image_index+=1seek_button_pressed=Truereturnseek_button_pressed,current_image_index#播放按钮defplay_button():paused=Falseunpaused=Truereturnpaused,unpaused#暂停按钮defpause_button():paused=Trueunpaused=Falsereturnpaused,unpaused
加载按钮,添加相册;
关闭按钮,退出播放器;
向后按钮,向后切换一张图片;
向前按钮,向前切换一张图片;
播放按钮,开始播放相册中的图片;
暂停按钮,暂停相册图片的播放;
设置主界面,包含主页标题栏,加载按钮,关闭按钮文字属性。
同时还需要监听鼠标点击事件。
#主界面defmain_menu():#主页标题栏TITLE_TEXT_SURFACE=bold_font().render("相册播放器",True,BASE_TEXT_COLOR)TITLE_TEXT_RECT=TITLE_TEXT_SURFACE.get_rect(center=(WIDTH/2,))SCREEN.blit(TITLE_TEXT_SURFACE,TITLE_TEXT_RECT)#加载按钮LOAD_BUTTON=Button(surface=MAIN_MENU_BUTTON_BACKGROUND,pos=(WIDTH/2,),text_input="加载",font=bold_font(),base_color=BASE_TEXT_COLOR,hovering_color="white")#关闭按钮QUIT_BUTTON=Button(surface=MAIN_MENU_BUTTON_BACKGROUND,pos=(WIDTH/2,),text_input="关闭",font=bold_font(),base_color=BASE_TEXT_COLOR,hovering_color="white")whileTrue:#监听鼠标点击事件current_mouse_pos=pygame.mouse.get_pos()LOAD_BUTTON.update(SCREEN)QUIT_BUTTON.update(SCREEN)#根据鼠标点击情况,是否点击右上角的关闭foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()#根据鼠标点击情况,点击加载或关闭按钮ifevent.type==pygame.MOUSEBUTTONDOWN:ifLOAD_BUTTON.check_for_input(current_mouse_pos):load_button()ifQUIT_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切换一张图片。
此外还要调整图片的尺寸大小,方便在播放器中查看。
#相册播放器功能函数defalbum_player(folder_path):SCREEN.blit(BACKGROUND_IMAGE,(0,0))image_file_paths=[]image_names=[]current_image_index=0paused=Falseunpaused=Falseseek_button_pressed=Falserewind_button_pressed=False#添加加载按钮后,得到的图片文件夹路径os.chdir(folder_path)forfileinglob.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-,HEIGHT-),text_input="",font=bold_font(),base_color=BASE_TEXT_COLOR,hovering_color="white")#暂停按钮PAUSE_BUTTON=Button(surface=PAUSE_ICON_SURFACE,pos=(WIDTH/2,HEIGHT-),text_input="",font=bold_font(),base_color=BASE_TEXT_COLOR,hovering_color="white")#播放按钮PLAY_BUTTON=Button(surface=PLAY_ICON_SURFACE,pos=(WIDTH/2,HEIGHT-),text_input="",font=bold_font(),base_color=BASE_TEXT_COLOR,hovering_color="white")#向前按钮SEEK_BUTTON=Button(surface=SEEK_ICON_SURFACE,pos=(WIDTH/2+,HEIGHT-),text_input="",font=bold_font(),base_color=BASE_TEXT_COLOR,hovering_color="white")#加载新相册按钮LOAD_NEW_ALBUM_BUTTON=Button(surface=LOAD_NEW_ALBUM_SURFACE,pos=(WIDTH-,HEIGHT-),text_input="",font=bold_font(),base_color=BASE_TEXT_COLOR,hovering_color="white")#获取时间,设置每5s切换一张图片previous_time=pygame.time.get_ticks()COOLDOWN=#设置图片名称文字属性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,))#图片张图显示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=(,))#获取图片宽高属性,窗口显示不合适,调整大小new_image_surface=pygame.image.load(image_file_paths[current_image_index])ifnew_image_surface.get_height():new_image_surface=pygame.transform.scale(new_image_surface,(new_image_surface.get_width()*(/new_image_surface.get_height()),))elifnew_image_surface.get_width():new_image_surface=pygame.transform.scale(new_image_surface,(,new_image_surface.get_height()*(/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()#监听鼠标点击事件whileTrue:foreventinpygame.event.get():#根据鼠标点击情况,是否点击右上角的关闭ifevent.type==pygame.QUIT:pygame.quit()sys.exit()ifevent.type==pygame.MOUSEBUTTONDOWN:#根据鼠标点击情况,做向前,向后,暂停,开始等切换图片操作current_mouse_pos=pygame.mouse.get_pos()ifREWIND_BUTTON.check_for_input(current_mouse_pos):rewind_button_pressed,current_image_index=rewind_button(current_image_index)ifSEEK_BUTTON.check_for_input(current_mouse_pos):seek_button_pressed,current_image_index=seek_button(current_image_index,image_names)ifpaused:ifPLAY_BUTTON.check_for_input(current_mouse_pos):paused,unpaused=play_button()else:ifPAUSE_BUTTON.check_for_input(current_mouse_pos):paused,unpaused=pause_button()ifLOAD_NEW_ALBUM_BUTTON.check_for_input(current_mouse_pos):load_button()current_time=pygame.time.get_ticks()#切换图片,一定时间、点击向后按钮、点击向前按钮、点击开始按钮ifcurrent_time-previous_time=COOLDOWNorrewind_button_pressedorseek_button_pressedorpausedorunpaused:unpaused=Falseifcurrent_image_indexlen(image_file_paths)-1andnotseek_button_pressedandnotrewind_button_pressedandnotpaused:current_image_index+=1SCREEN.blit(BACKGROUND_IMAGE,(0,0))REWIND_BUTTON.update(SCREEN)ifpaused: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])ifnew_image_surface.get_height():new_image_surface=pygame.transform.scale(new_image_surface,(new_image_surface.get_width()*(/new_image_surface.get_height()),))elifnew_image_surface.get_width():new_image_surface=pygame.transform.scale(new_image_surface,(,new_image_surface.get_height()*(/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,))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=(,))SCREEN.blit(image_count_text_surface,image_count_text_rect)pygame.display.update()previous_time=pygame.time.get_ticks()seek_button_pressed=Falserewind_button_pressed=False
同样也有监听鼠标点击事件,根据鼠标点击情况,做向前、向后、暂停、开始等切换图片操作。
最终效果如下。
好了,本期的分享就到此结束了,有兴趣的小伙伴可以自行去实践学习。
讲真,Python能做的东西真不少...
使用到的代码及文件链接:
转载请注明地址:http://www.1xbbk.net/jwbrc/476.html