前两天写了一个下载知乎视频的小程序,现在给他加了个图形界面,并生成exe文件。同时对原来的程序进行了优化,使用多线程进行任务分配和下载ts文件,解决了GUI卡顿的问题并大大加快了下载速度。

界面如下:

  • 1.自动检测文章链接是否规范以及链接对应的文章是否含有视频
  • 2.自动检测视频保存路径的规范性,路径可以自己填入或点击“打开”按钮选择
  • 3.可以选择视频质量,有HD、SD、LD三种
  • 4.最下面的滚动文本框可以显示相关提示信息
  • import os
    import json
    import requests
    from requests import RequestException
    from tkinter import *
    from tkinter.scrolledtext import ScrolledText
    from PIL import Image, ImageTk
    import threading
    from tkinter.filedialog import askdirectory
    def is_valid(url, path):
    	if url is '':
    		print('请输入文章链接...')
    		scrolled_text.insert(INSERT, '请输入文章链接...\n')
    		scrolled_text.see(END)
    		return None
    	else:
    		url_pattern = re.compile('^(https://www.zhihu.com/question/\d{8,9}/answer/\d{9})$', re.S)
    		result = re.search(url_pattern, url)
    		if result is None:
    			print('错误的文章链接,请重新输入...')
    			scrolled_text.insert(INSERT, '错误的文章链接,请重新输入...\n')
    			scrolled_text.see(END)
    			return None
    		else:
    			if path is '':
    				print('请输入视频保存路径...')
    				scrolled_text.insert(INSERT, '请输入视频保存路径...\n')
    				scrolled_text.see(END)
    				return None
    			else:
    				path_pattern = re.compile('(^[a-zA-Z]:/[0-9a-zA-Z_]+(/[0-9a-zA-Z_]+)*$)|(^[a-zA-Z]:/[0-9a-zA-Z_]*$)', re.S)
    				result = re.search(path_pattern, path)
    				if result is None:
    					print('错误的文件路径,请重新输入...')
    					scrolled_text.insert(INSERT, '错误的文件路径,请重新输入...\n')
    					scrolled_text.see(END)
    					return None
    				else:
    					return True
    def get_page(url):
    		headers = {
    			'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
    		response = requests.get(url, headers=headers, timeout=30)
    		if response.status_code == 200:
    			return response.text
    		print('链接访问失败,请重试...')
    		scrolled_text.insert(INSERT, '链接访问失败,请重试...\n')
    		scrolled_text.see(END)
    		return None
    	except RequestExcep
    我想用 python 构建一个 视频 播放 ,但是我的应用程序将有更多的按钮,而不仅仅是play/pause,所以我需要在窗口中插入 视频 。在到现在为止我有这个代码:import tkinter import osimport gigi.require_version('Gst', '1.0')from gi.repository import GObject, Gstdef set_frame_handle... 前文我们已经完成了一个集暂停、倍速、显示进度条功能为一体的 视频 播放 ,今天我们再来增加一个新的功能——发送弹幕。 tkinter 播放 视频 的原理,就是读取每一帧的图片,然后刷新画布。所以如果想实现弹幕功能,只要获取输入文本框中的文本,再写到图片上就好了。cv2.putText能够实现这个功能,但无法添加中文,所以我们需要换一种方法。首先,我们需要from PIL import ImageDraw,Im... 1.选择 视频 文件 from tkinter .filedialog import askdirectory,askopenfilename from tkinter import * def selectPath(): path_ = askopenfilename() path.set(path_) root = Tk() path = StringVar() Label(root,text = "目标路径:").grid(row = 0, column = 0) Entry(root, import tkinter as tk from tkinter .filedialog import askopenfilename, askdirectory from tkinter .messagebox import askquestion # from demo_neo import Extractor from PIL import Image from PIL import Imag... # 导入一些包 # opencv2 是 三方库 需要 pip install python -opencv video_path = './welcome.wmv' # 视频 的路径 win ... # 将类作为参数传入 # app = App( tkinter .Tk(), " tkinter player", 'test.mp4') def __init__(self, window, window_t