python调用you-get加wxpython做gui界面最后pyinstaller打包exe
本帖最后由 gongsui 于 2021-11-28 23:31 编辑去年学习python时随便玩玩自用的, 然后放在吃灰,重装系统后懒得再弄.
you-get调用方法有两种:(我现在自己都看不懂了)
you-get的调用方法:sys.argv + you_get.main()
you-get的python调用方法:you_get.any_download
you-get的参数自己调哈(清晰度\ 下载单个 还是下载列表等等).
难点在打包exe ,当时碰到很多问题,以下是笔记
pyinstaller打包方法:
pyinstaller -F xx.py --hidden-import=you_get.extractors --hidden-import=you_get.cli_wrapper --hidden-import=you_get.processor --hidden-import=you_get.utl
注:多进程打包后还是有问题 (这个备注我也不知道是什么意思, 可能已经解决 ,可能没解决)
pyinstaller打包 multiprocessing codes时会出现exe多次运行问题
解决方法:
在__main__中添加 multiprocessing.freeze_support()
wx模块请看 https://www.52pojie.cn/forum.php?mod=viewthread&tid=1290699&highlight=wxpython
注: url是每行一个 ,不是用空格隔开(代码写的是每行一个 ,界面文字没改过来)
文件夹也写死在 d:\1文件夹了.当时是随便写的 ,大家自己改哈
源码如下:
# -*- coding:utf-8 -*-
"""
you-get的gui的多进程(process)版本。
pyinstaller打包方法:
pyinstaller -F xx.py --hidden-import=you_get.extractors --hidden-import=you_get.cli_wrapper --hidden-import=you_get.processor --hidden-import=you_get.utl
注:多进程打包后还是有问题
"""
import wx
import sys
import multiprocessing
from you_get import common as you_get
# you-get主程序
def process(url):
directory = r'D:\1'# 设置下载目录
#print(f'Process:{url}')
sys.argv = ['you_get', '-o', directory, url]# sys传递参数执行下载,就像在命令行一样 ‘-o’后面跟保存目录。
you_get.main()
# 可视化代码,大部分是用小强wxpython工具自动生成的。
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='you-get-gui', size=(400, 300),name='frame',style=541072384)
self.启动窗口 = wx.Panel(self)
self.Centre()
self.编辑框1 = wx.TextCtrl(self.启动窗口,size=(300, 230),pos=(5, 25),value='',name='text',style=1073741856)
self.按钮1 = wx.Button(self.启动窗口,size=(119, 50),pos=(314, 125),label='按钮',name='button')
self.按钮1.Bind(wx.EVT_BUTTON,self.按钮1_按钮被单击)
self.标签1 = wx.StaticText(self.启动窗口, size=(200, 20), pos=(-25, 5), label='Urls:(多个用空格隔开)', name='staticText', style=2321)
def 按钮1_按钮被单击(self,event):
print('按钮1,按钮被单击')
#url = ['https://v.qq.com/x/page/e0907ffjn2i.html?','https://v.qq.com/x/page/v0907no9vxe.html?']
# 编辑框每个链接一行,可多行。# 按换行符分割
urls = self.编辑框1.Value
url = urls.split('\n')
for i in range(len(url)):
# 多线程调用 process函数,参数url 传入进去。url即每个链接
p = multiprocessing.Process(target=process, args=(url,))# target是函数名; args是函数的参数,注:是元组,要用()
p.start()
class myApp(wx.App):
defOnInit(self):
self.iDmfbdvaNk = Frame()
self.iDmfbdvaNk.Show(True)
return True
if __name__ == '__main__':
multiprocessing.freeze_support()
app = myApp()
app.MainLoop()
# 可视化代码end
太麻烦了,Python真的好麻烦 使用pyqt的托拉拽更方便!可视化方便操作! 太繁琐了 WX 是什么 谢谢 真的太好用了
页:
[1]