A. Electron 框架中调用 Python 构建桌面应用
不同的语言、框架都有自己擅长的领域:Electron 基于 Chromium 和 Node.js 能以 Web 开发的模式打造桌面应用,开发用户界面又快捷又简单;Python 则在数据分析、自动化脚本等领域有非常多的应用。两者的社区生态都十分强大,由两者共同构建应用,在界面开发、功能、性能上能够强强联合;
为了简单验证技术可行性,我们来编写一个 Demo:
目的:验证 Electron 打造的桌面应用能够调用 Python,思路是使用 RPC 或 HTTP 或 WebSocket 进行通信
Demo 功能:输入 x、y 坐标,程序会移动鼠标到屏幕的 x,y 位置(通过 python 库 pyautogui 实现)
Demo 运行环境:MacOS、pyInstaller: 版本 4.5.1、python: 版本 3.9.7
源码:-------- 项目源码 --------
注意:移动鼠标需要授予应用控制权限,在 MacOS 下设置 偏好设置 -> 隐私 -> 辅助功能 -> 允许对应的应用。
技术栈:NodeJS、Electron、Python、aiohttp(HTTP、WebSocket)、pyautogui(控制鼠标)
为了使 NodeJS 和 Python 能够通信,Python 需要启动一个本地通信服务,Demo 中 py/api.py 能够启动一个本地 HTTP 服务:
然后我们需要执行 Python 代码以启动服务,为了使 NodeJS 可以执行 Python,我们使用 pyinstaller 将 Python 打包成可执行文件:
Python 启动了本地 HTTP 服务后,Chromium 和 Node.js 就可以通过请求的方式,与 python 连接通信了:
简单来说三个步骤:
本项目只是一个验证思路的 Demo,真的需要在项目上实践,还需要考虑以下几个点:
应该使用 RPC 通信而不是 HTTP 或者 WebSocket,Demo 使用 HTTP 只是搭建方便。实践中在建立连接、保持连接、异常重连都需要编写更多的逻辑来处理。为什么 Demo 没有使用 zerorpc? 这个库已经 4 年没有维护了,不兼容新版 NodeJS。
项目通过 pyinstaller 打包成可执行文件来调用 python。实际上其他能编译为可执行文件的语言也一样。还可以使用 WebAssembly 将其他语言编译成 .wasm,在 NodeJS 中引入执行。
B. 桌面开发c#还是python
推荐python,理由是基本符合你的要求,从你对matlab的使用上看,对参数方面应该还是理解力有一定基础,python上手相对比c#快,基本有点英语基础,有点面向对象就可以上手了,提供工作效率不就是脚本,在现今的脚本python绝对是你的不二选择,不要问为什么,自己看运维方面的,懂python的效率绝对高,编辑桌面程序,模块有很多可以选择,基本用法都差不多,内置的Tkinter每天花个2-3小时,一个礼拜就可以开始设计了。PYQT(可以使用他的软件进行控件布局在转换成python代码),wxpython也简单,设计方法大同小异,简答网络程序(指爬虫?,还是脚本上网等)爬虫的框架多,学习也简单,脚本也很简单,然后安卓可以使用(不清楚你的意思,是编译后可以使用?还是可以进行编程?)反正有qpython,我自己手机也下了,可以进行编程,web开发都行,但要下载模块,然后现在移动服务器很多使用python进行开发,用的框架也很多,反正看你的学习方向(web,还是桌面开发,运维等方面,如果只是兴趣的话,更好,因为你会发现python的优点。
C. python为什么不适合开发桌面软件
不适合,因为python本身是脚本语言,如果要开发桌面软件,要用到py2exe等工具来将一个有GUI的.py文件转换成exe等可执行文件,在这个过程中,很容易将源代码暴露给用户看,也就是说这和开源没多大区别了。
我个人感觉更适合开发各种管理系统。看我接下来举的例子你就明白了。
Python中的函数与普通数学中的函数基本上是一致的——它接收输入数据,对数据进行处理并输出结果。输出的结果完全取决于函数是如何被设计的。另一方面,Python中的类是被设计为输出其他对象的对象的原型。
D. python是只能做网站么,不能制作桌面应用程序吧。
除了不能写操作系统,其它的都可以。