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是只能做網站么,不能製作桌面應用程序吧。
除了不能寫操作系統,其它的都可以。