首頁/ 汽車/ 正文

aardio + Python 快速開發桌面軟體教程

一個 Python 使用者發給我的感謝信就是這麼寫的: “…… 我是剛開始用 aardio 寫介面(實在不想用 PyQt 了),Python 寫資料處理業務,感受到了 aardio 的強大和奇妙。我想把 Python 資料處理過程的資訊反饋到前端介面中,《這回讓我們把 Python 玩出花來》看完後,用了幾分鐘搞定!!!實在令人驚訝 aardio 的強大!!!…… ”。

一、在 aardio 中定義 Python 全域性變數

import console;import py3; //設定 __main__ 模組變數py3。main。gVar = “這樣指定 Python 全域性變數”; //執行Python3 的程式碼py3。exec( `def func(): return gVar ` ); //呼叫 Python __main__ 模組內的函式console。log( py3。main。func() );console。pause();

注意上面用反引號( 鍵盤左上方的 ESC 下面那個鍵)包含 Python 程式碼。在 aardio 中反引號的作用與雙引號一樣都是包含原始字串( 單引號裡才支援轉義符)。

二、將任何 aardio 物件匯出到 Python 環境

Python 呼叫 COM 物件不是很方便,這很容易解決,在 aardio 用一句 py3。export(com) 就可以把 com 庫提供給 Python,在 Python 呼叫 aardio 物件 —— 真的太簡單了 。

import com; import winex; import py3;//匯出 aardio 中 com 庫到 Python 環境py3。main。com = py3。export(com); var pyCode = /** def testPy(winex): wsh = com。CreateObject(“wscript。shell”) wsh。exec(“notepad”) winex。wait(None,None,“Notepad”,“Edit”); **///執行Python程式碼py3。exec( pyCode ); //呼叫 Python 函式py3。main。testPy( py3。export(winex) //也可以透過引數將 aardio 物件匯出給 Python);

在 aardio 中可以將註釋賦值給一個字串,aardio 的多行註釋如同所有類 C 語言放在 /* 。。。。。 */ 標記內部,但 aardio 裡這個標記的首尾 * 號數目要匹配 —— 利用這一特性,我們可以任意巢狀這個標記而不會發生衝突( 所以用註釋包含其他類 C語言的原始碼就非常方便)。

三、aardio 物件傳入Python 是傳值, Python 物件傳入 aardio 傳址。

這個一定要牢記,例如你在 aardio 中建立 Python 物件 py3。int(123) 你得到的一定不是一個 aardio 數值,而是一個 py。object 物件。當你執行下面的程式碼時你會看到控制檯輸出了 123:

console。log( py3。int(123) );

這是因為 console。log 會自動呼叫 tostring() 函式將所有引數轉換為字串,所以上面的程式碼等價於:

console。log( tostring(py3。int(123)) );

而上面的程式碼又會被轉換為下面的呼叫:

console。log( py3。int(123)。toString() );

如果你想把這個 Python 數值轉換為 aardio 數值要這樣寫:

console。log( py3。int(123)。toNumber() );

或者這樣寫:

console。log( tonumber(py3。int(123)) );

aardio 總是引用原始的 Python 物件 —— 而不是去複製這些物件的值。

但如果 aardio 物件傳入Python 則是傳值,例如你在 aardio 裡呼叫 Python 函式,然後傳一個 aardio 字串、或 aardio 陣列給 Python ,Python 裡收到的一定是重新建立的 Python 物件。

那麼我們前面講的 py。export() 是如何實現在 Python 中引用 aardio 物件的呢?!py。export() 其實返回的是一個 Python 物件 —— 但是這個 Python 物件裡記錄了 aardio 物件的地址,具體實現請參考這個庫的開原始碼。

四、aardio 裡怎麼執行 *.py 檔案

我們在範例裡基本都是執行放在字串裡的 Python 程式碼,這只是為了方便複製貼上。一般我們寫程式需要先建立一個 Python 工程:

aardio + Python 快速開發桌面軟體教程

在 Python 工程裡預設有 2 個的目錄:

1、/res/ 目錄,這個目錄是一個嵌入資源目錄,該目錄下的檔案釋出後會嵌入 EXE 內。aardio 中的很多函式都自動相容這種資源目錄路徑(必須以斜杆或反斜杆為首字元以表示工程根目錄),例如用 string。load(“/res/test。txt”) 可以讀取資原始檔內容,用

py3。exec(“/res/test。py”)

可以執行資源目錄下的 Python 程式碼。

aardio + Python 快速開發桌面軟體教程

2、/py/ 目錄,這個目錄不需要設為嵌入資源目錄,Python 可載入這個目錄下的 Python 模組檔案。例如:

py3。import(“pyMain”)

就可以匯入 /py/pyMain。py 檔案,當然也可以在 Python 程式碼裡匯入這些模組。

aardio + Python 快速開發桌面軟體教程

要注意只有新增到工程中的檔案才會被髮布,可以右鍵點工程目錄,然後點選「同步本地目錄」自動新增該目錄下的所有檔案:

aardio + Python 快速開發桌面軟體教程

五、如何安裝更多 Python 模組

aardio 中幾乎不需要自己動手去安裝擴充套件庫,執行程式碼就會自動分析引用 —— 缺少的庫會自動安裝,而且幾乎不會遇到版本衝突、或者各種依賴模組問題。

Python 這一塊其實是略有些麻煩的,但是隻要你在 Python 裡知道怎麼安裝模組,在 aardio 中並不會更麻煩多少。唯一記住的就是系統安裝的 Python 開發環境使用的 Python 版本要與你在 aardio 中使用的 Python 版本完全相同,在 aardio 中可以這樣檢視 py3 擴充套件庫使用的 Python 版本資訊( 注意是 32 位環境 ):

import console;console。open();import py3; py3。run();

然後在系統安裝的相同版本 Python 環境下用 pip 安裝模組,要注意看 pip 的提示安裝了哪些依賴模組,在 Python 安裝目錄下開啟 \Lib\site-packages 目錄找到安裝好的模組檔案以及依賴模組檔案 —— 開啟目錄你就能看懂。

把你所需要的全部模組檔案複製出來,放到 aardio 裡就可以了。可以把新增的模組放到工程目錄下面的 /py/ 目錄下,也可以放到擴充套件庫目錄下,例如 py3 擴充套件庫可以在 “~\lib\py3\。res\DLLs” 目錄下新增模組。

當然也可以放到其他目錄下,

然後在 aardio 裡用下面的程式碼新增該模組所在目錄:

py3。appendPath(“模組的父目錄路徑”);

我們還可以在 aardio 裡新增擴充套件庫自動做這些事,用 aardio 擴充套件庫做這事有一個極大的好處 —— 在 aardio 庫目錄下可以新增一個:

\。build\main。aardio

「釋出觸發器」檔案。在釋出生成 EXE 以後 aardio 會檢測程式引用的所有庫,並在該庫目錄下查詢上述的「釋出觸發器」,如果找到「釋出觸發器」就會執行該觸發器。所以我們可以利用這個檔案寫上幾句程式碼 —— 在釋出時把 Python 模組複製到釋出目錄下正確的位置。

我寫了一個安裝 Python 模組的 aardio 擴充套件庫作為範例,先演示一下用法:

import py3;import py3。lib。jsonrpclib;thread。create(“~\codes\範例程式\8) Web 應用\2) JSON\rpcServer。aardio”)thread。delay(1000);var pyCode = /**def testRpc(): import jsonrpclib server = jsonrpclib。Server(‘http://127。0。0。1:8610/jsonrpc’) return server。hello(“jacen” ) **/ py3。exec(pyCode);import console;console。log( py3。main。testRpc() )console。pause()

jsonrpclib 是一個 Python 3 模組,用於實現 JSON-RPC 服務端或客戶端。py3。lib。jsonrpclib 擴充套件庫就是用來自動安裝這個模組。

這個 py3。lib。jsonrpclib 擴充套件庫的主要原始碼其實就一句:

py3。appendPath(“~\lib\py3\lib\jsonrpclib\。py”)

建議大家看一下這個擴充套件庫的原始碼,以及這個擴充套件庫目錄下面的「釋出觸發器」,程式碼很少,我寫了很多註釋。

不要認為直接用 pip 安裝多簡單 —— 那個裝了只能你自己用。而在 aardio 裡配置好 Python 模組以後,那麼你釋出的軟體可以給任何使用者用了,他們不需要再去下載、配置、安裝額外的 Python 環境或模組。

六、在 aardio 中如何選擇 Python 版本

aardio 幾乎為所有主要 Python 版本都編寫了擴充套件庫:

import py2; //匯入 Python 2。7 擴充套件庫,支援 XP 及 XP 以上系統import py3; //匯入 Python 3。8 擴充套件庫,支援 Win7 及 Win7 以上系統import py3。10; //匯入 Python 3。10 擴充套件庫,支援 Win10 及 Win10 以上系統import py3。6; //匯入 Python 3。6 擴充套件庫,支援 Win7 及 Win7 以上系統import py3。4; //匯入 Python 3。4 擴充套件庫,支援 XP 及 XP 以上系統

在一個程式中,不應同時匯入多個不同版本的 Python 擴充套件庫,aardio 中所有 Python 擴充套件庫都自帶綠色 Python 執行時。

注意 py3 擴充套件庫匯入後使用時應去掉副版本號,例如:

import py3。4;import console;console。log( py3。version );console。pause();

大家可能會問為什麼其他程式語言的擴充套件庫都只有一個版本,為什麼 Python 要搞這麼多版本呢?!這就一言難盡不多說了。

七、

幾個重要的範例一定要看

「aardio 範例 / Windows 視窗 / 入門 」

「aardio 範例 / 呼叫其他語言 / Python 語言 」

aardio + Python 快速開發桌面軟體教程

八、 aardio 與 Python 語法規則等簡單對比

在「 aardio 範例 / 呼叫其他語言 / Python 」目錄下有更多內容,這裡說幾個最基本的:

aardio 以 // 開始行註釋

Python3 以 # 符號開始行註釋。

aardio 以 /* …… */ 包含允許多行的大段註釋,要求首尾標記星號數目匹配。可用於賦值語句將註釋賦值為字串。

Python 以 “”“ …… ”“” 包含允許多行的大段註釋。

aardio 跳脫字元串可以放在單引號裡,原始字串放在雙引號或反引號裡(字串內可用兩個引號表示原來的引號)

而 Python 雙引號、單引號內都是跳脫字元串,在雙引號字串前加 r 表示原始字串。

aardio 在引號內的字串可以任意換行。

Python 在引號內的字串要在行尾新增續行符 \ 才能換行。

aardio 中使用 {} 包含語句塊。

Python 使用縮排包含語句塊,同一語句塊內程式碼縮排使用的空格、製表符、重複次數要完全一致。

aardio 使用 var 語句定義區域性變數,否則預設為全域性變數。

Python 使用 global 定義全域性變數,否則預設為區域性變數。

aardio 使用 。。。 表示不定引數。

Python 在引數名字前加 * 號表示不定引數。

aardio 關鍵字首字元都是小寫,例如 true,false,null。只有全域性常量,外部 API,外部 COM 函式等會首字元大寫。

Python 有些關鍵字首字元大寫,例如 True,False,None。

aardio 中空值為 null。

Python 中空值為 None。

aardio 下劃線開始的成員變數、屬性是隻讀保護變數,只能設定一次非 null 值。

Python 變數名前後的下劃線有特殊用途,但規則更復雜一些:__名字__ 為系統保留,__名字 為私有屬性,_名字 為保護型別屬性。

aardio 可以將任何不存在的變數、屬性作為表示式直接判斷 null 值。

Python 中訪問不存在的變數會丟擲 NameError 異常,而訪問物件不存在的屬性會丟擲 AttributeError,KeyError 異常。

aardio 中一個函式失敗慣例多會返回兩個返回值,即 null,錯誤資訊。不會輕易丟擲異常,很少使用 try 語句。

Python 中拋異常比較常見,try 語句用得多一些。

aardio 是識別符號大小寫敏感的語言。

Python 同樣是識別符號大小寫敏感的語言。

aardio 的程式碼檔案是 UTF8 編碼。

Python3 的程式碼檔案也是 UTF8 編碼。

aardio 字串預設使用 UTF-8 編碼,相容二進位制字串,支援 UTF-16 編碼的 Unicode 字串, aardio 字串擁有 UTF 自動標記功能。

Python3 字串為 Unicode 編碼,而 aardio 與 Python 介面互動統一使用的是 UTF-8 編碼。

aardio 中的二進位制位元組陣列為 buffer 型別。

Python3 中的二進位制位元組陣列為 bytes 型別。

aardio 中定義一個字典(表):

var dic = { 鍵 = “值”; 鍵2 = “值2”; test = 123;}

Python 中定義一個字典:

dic = { “鍵” : “值”,“鍵2” : “值2”, “test” : 123 }

有趣的是在 aardio 中也允許使用上面的語法定義表物件。

Python 遍歷字典是這樣寫:

for k in dic: print(k) print(dic[k])

aardio 遍歷字典 (表) 這樣寫:

for k,v in dic{ io。print(k,v)}

Python 中刪除一個字典成員:

del dic[“test”]

aardio 中刪除一個表成員:

dic[“test”] = null

Python 中定義列表:

list =[1,2,34,56]

aardio 中定義陣列:

list = {1,2,34,56 }

aardio 陣列原來只允許用分號分隔,為了讓大家少學新語法現在允許用逗號分隔了。

Python 中迴圈遍歷列表:

for i in list: print( i )

aardio 中迴圈遍歷陣列:

for(i=1;#list){ io。print(list[i]) }

Python 中定義一個類:

class Stack(object): def __init__(self): self。stack = [ ] def push(self,object): self。stack。append(object)

aardio 中定義一個類:

class stack { ctor(){ this。stack = {}; }; push = function(object){ 。。table。push(this。stack ,object); }}

Python 中建構函式叫 __init__,aardio 中建構函式叫 ctor。Python 中當前物件例項叫 self,aardio 中當前物件例項叫 this,self 在 aardio 中表示當前名字空間,注意 aardio 類有獨立的靜態名字空間 - 在類內訪問全域性名字空間的變數要在前面加兩個點,例如 。。table 。

相關文章

頂部