gongsui 发表于 2021-4-25 09:59

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

大兵马元帅 发表于 2021-4-25 10:33

太麻烦了,Python真的好麻烦

Cool_Breeze 发表于 2021-4-25 10:44

使用pyqt的托拉拽更方便!可视化方便操作!

老道创 发表于 2021-4-25 10:55

太繁琐了

xq2581 发表于 2022-4-9 16:40

WX 是什么

JJ11840131 发表于 2022-4-9 18:02

谢谢 真的太好用了
页: [1]
查看完整版本: python调用you-get加wxpython做gui界面最后pyinstaller打包exe