前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Gooey GUI生成界面避坑记

用Gooey GUI生成界面避坑记

作者头像
代码医生工作室
发布2022-04-14 15:33:38
1.8K0
发布2022-04-14 15:33:38
举报
文章被收录于专栏:相约机器人相约机器人

用Gooey GUI生成界面

Gooey 一款为命令行工具制作图形界面的工具。如果看了网上关于Gooey的宣传或介绍,你一定很想试试,但是使用之后才发现全是坑。问题不是Gooey不行,而是没有更深入、更详细的教程。

Gooey入门

源码和教程,最好参考github上的。

https://github.com/chriskiehl/Gooey

如果看着不方便,可以参考部分中文教程。但没有哪个教程足够详细,能够真实指导使用的。中文教程参考如下:

https://blog.csdn.net/qq_33682575/article/details/103584885 https://www.jianshu.com/p/b2c1552cd407

简单介绍几句:

代码语言:javascript
复制
#help是屏幕上提示的文字 --表示可选参数。不加--就是必选
ffmpeg_parser.add_argument('--fps',
                               help='set frame rate (default = 25)',
                               type=str)

Gooey使用

真正想搞明白Gooey的使用,还得拿个例子试试。链接如下:

https://github.com/chriskiehl/GooeyExamples

推荐使用例子中的subparser_demo.py 该代码运行后是这样:

源码中的display_message()需要引用其他文件,直接编译不过,都可以换成print(parser.parse_args())

生成exe

官网上给出了方法和spec文件。但介绍的太简单并且运行有错,也没有合适的文章。可以参考以下:

pyinstaller使用

pyinstaller -F –windowed build-win.spec

这里有一份写好的,用于编译Gooey的spec文件,要想编译别的文件还得单独去写。

https://ai.aianaconda.com/blog/exe/dabao/build-win.spec

-F 表明要生成1个整文件

如何防止pyinstaller包过大

1.新建虚环境,尽量不要使用特别新的库。

代码语言:javascript
复制
conda create --name dabao38 python=3.8

2.在新环境里运行py代码。保证所有包安装好。

3.重新打包。

遇到的pyinstaller坑

pyinstaller 打包运行后,出问题的解决方法。

修改spec文件

代码语言:javascript
复制
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          options,
          gooey_languages, # Add them in to collected files
          gooey_images, # Same here.
          name='genkitti',      # 打包文件名称
          debug=False,
          strip=None,
          upx=True,
          console=False,
          icon=os.path.join(gooey_root, 'images', 'program_icon.ico'))

将console 和 debug 改成True,再重新生成,即可从控制台看到错误。

pyinstaller打包Gooey GUI时出现编码错误

错误如下:

代码语言:javascript
复制
Exception in thread Thread-1:
Traceback (most recent call last):
File "threading.py", line 932, in _bootstrap_inner
File "threading.py", line 870, in run
File "gooey\gui\processor.py", line 70, in _forward_stdout
File "gooey\gui\processor.py", line 84, in _extract_progress
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte

解决办法参考下面链接:

https://www.cnblogs.com/KingRainGrey/p/15269347.html

该链接改的不够彻底,打包完还得改回去。可以用下面的方式来改,效果会更好。例如文件:

D:\ProgramData\Anaconda3\envs\dabao38\Lib\site-packages\gooey\gui\processor.py

修改:

代码语言:javascript
复制
           pub.send_message(events.PROGRESS_UPDATE, progress=_progress)
            if _progress is None or self.hide_progress_msg is False:
                try:
                    pub.send_message(events.CONSOLE_UPDATE,
                                     msg=line.decode(self.encoding))
                except UnicodeDecodeError :
                    pub.send_message(events.CONSOLE_UPDATE,
                                     msg=line.decode("gbk"))
        pub.send_message(events.EXECUTION_COMPLETE)
 
    def _extract_progress(self, text):
        '''
        Finds progress information in the text using the
        user-supplied regex and calculation instructions
        '''
        # monad-ish dispatch to avoid the if/else soup
        try:
            find = partial(re.search, string=text.strip().decode(self.encoding))
        except UnicodeDecodeError :
            find = partial(re.search, string=text.strip().decode("gbk"))

更多的错误参考

可以自行尝试,链接如下:

https://blog.csdn.net/u012219045/article/details/115397646

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档