基于pywebview的桌面小工具开发记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于pywebview的桌面小工具开发记录相关的知识,希望对你有一定的参考价值。

参考技术A 近期工作上有一个新的需求:开发一个桌面端小工具,用来将用户端数据按照标准协议转换并输出。工作以来,B/S项目是主要工作内容,其他的基于console的工具、手机端app也有一些,但是GUI的开发还是首次。

因为前段时间用pandas做了一些数据处理,非常欣赏pandas这种数据处理、数据分析的能力,思考了下项目中对excel的处理转换pandas都可以满足,所以打算基于python来完成这个小项目。python的GUI技术/框架非常多,可以参考 GUI Programming in Python .

最开始考虑使用原生GUI,于是基于google做了一些初步的调研分析:

因为这个项目是一整套商业化平台的配套工具,许可问题放弃 PyQT5 ;同时因为终端要支持mac和windows, PyGtk 不适合;放弃 TK 是因为它的组件和功能满足不了项目需求;剩下的 wxPython 或者 PySimpleGUI 大致是比较接近需求的方案,不过上面列出的缺点也是让我有些顾虑。

原生GUI框架避免不了的问题就是增加了额外的学习成本,Python的GUI实现也有一些基于web的实现框架,web的界面操作能力和开发效率都不是原生GUI能比的,如果能用web来解决需求,那当然是最合适的。初步调查结果如下:

调研过程中,被 electron 种草,不过最终决定不改初衷,这个项目还是使用 ython+PyWebview 实现;但是如果pywebview在使用中遇到比较严重的坑,也做好了随时切换到 nodejs+electron 的心理准备;中间也曾想过,使用 python+nodejs+electron 来实现,这样就兼顾到了electron和pandas,不过这样做毕竟不太优雅,为了把nodejs和python黏合到一起,同时运行了两套运行时,和一个额外的socket服务,不是第一选择。

pywebview支持两种方式集成html/js/css,一种是使用简易的内置的web服务器,一种是使用第三方的web框架,比如flask。因为内置web服务器局限性比较大也不够灵活,项目基于 flask 搭建。前端UI框架因为考虑到兼容IE使用了 layui ;数据处理使用 pandas ;项目打包使用 pyinstaller 。

项目部分结构如下:

pyinstaller打包在mac上基本上比较顺利,但是在windows上出现了一些问题,记录如下:

Android桌面小部件AppWidget开发

参考技术A 在Android我们经常可以看到各种桌面小部件,比如时钟、天气、音乐播放器等等。我们可以使用AppWidgetProvider来实现小部件的开发。

开发一个桌面小部件的步骤:

在res/layout/下新建一个布局文件,名称和内容自定义,看你想把小工具做成什么样。需要注意的是系统默认的小工具布局中只支持以下这些标签,如果用了列表以外的标签,会导致小工具加载错误:

比如,我们创建了一个名为widget_layout.xml的布局文件:

定义小部件的配置信息需要在res目录下新建一个xml目录,然后在res/xml/目录下创建一个配置文件,配置文件名称随意。新建app_widget_provider_info.xml:

上面的参数意义很明确,initialLayout指小部件的初始化布局,一般与最终布局相同;minHeight和minWidth定义了小部件的最小宽高,与小部件所占网格大小有关;previewImage可以指定在添加小部件时看到的预览图;updatePeriodMillis指定了小部件的自动更新周期,单位为毫秒。

其中minHeight和minWidth的定义可以参考官方文档: https://developer.android.com/guide/practices/ui_guidelines/widget_design.html#design

OK,小部件完成了,运行一下看看效果:

以上是关于基于pywebview的桌面小工具开发记录的主要内容,如果未能解决你的问题,请参考以下文章

基于Electron的Windows桌面闹钟小程序

TaskHosting - 开发桌面工具原来还可以这么简单

太强了!Python 开发桌面小工具,让代码替我们干重复的工作-

基于Electron的Windows桌面闹钟小程序

基于Electron的Windows桌面闹钟小程序

Windows 桌面边栏小工具开发入门