python常用代码块 | python PyWebIO实现浏览gif/视频效果

本文介绍了如何使用Python的PyWebIO库实现一个简单的功能,让用户在浏览器中批量浏览和预览GIF和MP4文件,同时处理视频尺寸过大导致的加载问题。

python PyWebIO实现浏览gif/视频效果

代码功能,使用浏览器批量浏览gif mp4等文件

界面展示
gif播放效果展示
mp4播放效果展示

备注:视频尺寸过大会导致加载很慢

代码:

import tkinter as tk
import os,sys
import windnd
from pywebio.output import *
from pywebio import STATIC_PATH
from PIL import Image
import pywebio_battery
from random import sample

baseDirPath = sys.path[0]

if __name__ == '__main__':
  root = tk.Tk()
  root.geometry('1080x540')
  
  ################################################
  path = tk.StringVar()
  path.set('d:\\')
  
  play_list = []
  
  def dragged_files(files):
    msg = '\n'.join((item.decode('gbk') for item in files))
    path.set(msg)
    
  types = ['jpg','png','gif','mp4']
  
  def bf():
    pass
    
  def play():
    global play_list
    play_list = []
    dir_path = path.get()
    print(dir_path)
    for roots, dirs, files in os.walk(dir_path):
      for file in files:
        if file.split('.')[-1].lower() in types:
          file_path = os.path.join(roots, file)
          print(file_path)
          play_list += [file_path]
          
    print(play_list)
    with use_scope('E'):
      put_row([put_button('before', onclick = bf,color = 'primary', outline=True), put_button('after', onclick = bf,color = 'primary', outline=True)],size = '90% 10px 10%')

    with use_scope('A'):
      index_list = sample(range(0, len(play_list)-1), 8)
      for index_n in index_list:
        
        fpath = play_list[index_n]
        if fpath.split('.')[-1].lower() == 'mp4':
          with open(fpath, 'rb') as f:
            video_data = f.read()
          pywebio_battery.put_video(video_data, width = '400px', muted = True, autoplay = True, loop=True)
        else:
          img = open(fpath, 'rb').read()  
          put_image(img, width='400px')

    put_html('''
    <style>
    #pywebio-scope-E {position: fixed;top: 0;width: 70%;background-color: #fff;}
    #pywebio-scope-A {border: 1px solid red;margin-top:30px; margin-left:20px;}                   
    </style>
    ''').show()
  
  ##########界面  绘制#####################
  code_fm = tk.LabelFrame(root, text='', padx= 10, pady = 2)
  code_fm.pack(fill = 'x')
  
  code_num = tk.Label(code_fm, text='地址', padx= 10, pady = 2)
  code_num.pack(side='left')
  
  code_num_e = tk.Entry(code_fm, width = 60, textvariable=path)
  code_num_e.pack(side='left', padx = 5,pady = 2)
  
  #################
  windnd.hook_dropfiles(code_num_e , func=dragged_files)
  
  tk.Button(code_fm, text='播放', width = 10, command = play).pack(side='left', padx = 5, pady = 2)

  root.mainloop()

源码:https://download.youkuaiyun.com/download/mjc1321/89075697

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值