Sciter是非常優(yōu)秀的跨平臺(tái)GUI圖形界面編程庫(kù)词爬,只需附帶一個(gè)動(dòng)態(tài)鏈接庫(kù)文件如暖,就可以實(shí)現(xiàn)基于HTML/CSS/TiScript的圖形界面吏垮,并且已經(jīng)經(jīng)過很多公司和商用產(chǎn)品的實(shí)際檢驗(yàn),穩(wěn)定可靠。我們常見的包括TeamViewer惋鸥,Symantec猬腰,Vmware鸟废,Evernote,360等公司或產(chǎn)品據(jù)說都使用了Sciter來制作界面姑荷,可見Sciter相當(dāng)值得信賴盒延。
Sciter提供多種語言的綁定,Gox語言中鼠冕,通過Go語言(Golang)的綁定來使用Sciter添寺,具體文檔可以參考Go-Sciter。這也是Sciter官方推薦的Go語言綁定庫(kù)懈费。
在Gox語言的0.998a版本之后计露,可以用類似下面的代碼實(shí)現(xiàn)一個(gè)圖形界面的小計(jì)算器程序。
sciter = github_scitersdk_gosciter
window = github_scitersdk_gosciter_window
htmlT := `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Calculator</title>
</head>
<body>
<div style="margin-top: 10px; margin-bottom: 10px;">
<span>Please enter the expression:</span>
</div>
<div style="margin-top: 10px; margin-bottom: 10px;">
<input id="mainInputID" type=text />
</div>
<div>
<button id="btnCal">Calculate!</button>
<button id="btnClose">Close</button>
</div>
<script type="text/tiscript">
$(#btnCal).on("click", function() {
var result = eval($(#mainInputID).value);
view.prints(String.printf("%v", result));
$(#mainInputID).value = result;
});
$(#btnClose).on("click", function() {
view.close();
});
</script>
</body>
</html>
`
runtime.LockOSThread()
w, err := window.New(sciter.DefaultWindowCreateFlag, sciter.DefaultRect)
checkError(err)
w.SetOption(sciter.SCITER_SET_SCRIPT_RUNTIME_FEATURES, sciter.ALLOW_EVAL | sciter.ALLOW_SYSINFO)
w.LoadHtml(htmlT, "")
w.SetTitle("Calculator")
w.DefineFunction("prints", func(args) {
tk.Pl("%v", args[0].String())
return sciter.NewValue("")
})
w.Show()
w.Run()
程序運(yùn)行后界面類似下面截圖所示:
可以在其中文本框中輸入任意算式憎乙,然后點(diǎn)擊“Calculate!”按鈕進(jìn)行計(jì)算票罐,點(diǎn)擊“Close”按鈕退出程序。下面將代碼逐行解釋版本放出泞边,可以更好的理解一般Sciter與Gox結(jié)合的方式该押。
// 首先按Gox語言的規(guī)則,用短名稱引用github.com/scitersdk/go-sciter庫(kù)和它的window子庫(kù)
// 如果不使用簡(jiǎn)稱繁堡,則可以直接使用github_scitersdk_gosciter這樣的全稱來引用沈善,也是可以的,這樣無需在一開始聲明
sciter = github_scitersdk_gosciter
window = github_scitersdk_gosciter_window
// 這是默認(rèn)準(zhǔn)備加載的html文件內(nèi)容椭蹄,直接放在字符串里了
// 其中布局很簡(jiǎn)單闻牡,就是一個(gè)抬頭,一個(gè)文本框用于輸入算式绳矩,和兩個(gè)按鈕分別用于計(jì)算和退出程序
// 需要注意的是罩润,Sciter并不支持Javascript來做腳本編程,而是使用自己的TiScript翼馆,據(jù)說某些方面比Javascript功能更強(qiáng)割以,相當(dāng)于結(jié)合了JQuery的Javascript加強(qiáng)版吧
// 注意其中綁定兩個(gè)按鈕點(diǎn)擊函數(shù)的方法金度,以及TiScript中選擇器的用法
// 其中用到的view.prints函數(shù)則是綁定的后面注入的Go語言中編寫的函數(shù),這演示了如何在Sciter中調(diào)用Gox語言編寫的函數(shù)严沥,Gox語言與Sciter結(jié)合猜极,才能發(fā)揮最大的威力
htmlT := `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Calculator</title>
</head>
<body>
<div style="margin-top: 10px; margin-bottom: 10px;">
<span>Please enter the expression:</span>
</div>
<div style="margin-top: 10px; margin-bottom: 10px;">
<input id="mainInputID" type=text />
</div>
<div>
<button id="btnCal">Calculate!</button>
<button id="btnClose">Close</button>
</div>
<script type="text/tiscript">
$(#btnCal).on("click", function() {
var result = eval($(#mainInputID).value);
view.prints(String.printf("%v", result));
$(#mainInputID).value = result;
});
$(#btnClose).on("click", function() {
view.close();
});
</script>
</body>
</html>
`
// 由于所有GUI編程最好都保證在一個(gè)線程中執(zhí)行界面操作,因此用這句話鎖定線程
runtime.LockOSThread()
// 創(chuàng)建一個(gè)Sciter窗口
w, err := window.New(sciter.DefaultWindowCreateFlag, sciter.DefaultRect)
// 檢查消玄,有錯(cuò)誤則直接退出程序執(zhí)行
checkError(err)
// 設(shè)置一些必要的Sciter參數(shù)跟伏,例如允許eval函數(shù)等
w.SetOption(sciter.SCITER_SET_SCRIPT_RUNTIME_FEATURES, sciter.ALLOW_EVAL | sciter.ALLOW_SYSINFO)
// 在窗口中載入HTML文本,第二個(gè)參數(shù)可以設(shè)置基礎(chǔ)的URL
w.LoadHtml(htmlT, "")
// 設(shè)置窗口標(biāo)題欄文本
w.SetTitle("Calculator")
// 給Sciter注入prints函數(shù)翩瓜,在TiScript中使用view.prints來調(diào)用
w.DefineFunction("prints", func(args) {
tk.Pl("%v", args[0].String())
return sciter.NewValue("")
})
// 顯示Sciter窗口并執(zhí)行
w.Show()
w.Run()
Sciter完全支持HTML/HTML 5受扳,完整支持CSS 2.1和部分CSS 3,并且真正支持跨平臺(tái)兔跌,由于Gox語言也是跨平臺(tái)的勘高,所以上面的程序在Windows、Linux和MacOS中都可以直接執(zhí)行(注意各個(gè)平臺(tái)都要帶上Sciter的動(dòng)態(tài)鏈接庫(kù)坟桅,Windows下只需要將sciter.dll放在Gox主程序相同的目錄下即可华望,最新的Gox壓縮包中已經(jīng)包含了該dll文件,Linux和MacOS中相對(duì)復(fù)雜桦卒,請(qǐng)參考Go-Sciter的說明文檔立美,僅需依照前兩步將動(dòng)態(tài)鏈接庫(kù)文件設(shè)置好即可)。
在Gox語言中使用Sciter庫(kù)進(jìn)行GUI圖形界面編程方灾,主要的優(yōu)點(diǎn)在于:
- 真正支持跨平臺(tái),Windows碌更、Linux和MacOS都是基本完美支持裕偿;而Gox中的LCL庫(kù)目前在Linux和Mac上還無法支持;
- 支持虛擬機(jī)環(huán)境痛单,Giu庫(kù)則在虛擬機(jī)和云服務(wù)器上由于一般沒有OpenGL顯卡嘿棘,所以無法支持;而Sciter則完全沒有問題旭绒;
- Sciter本身自帶的TiScript腳本語言鸟妙,已經(jīng)可以解決很多小問題了,本例中的計(jì)算功能既是由TiScript語言中的eval函數(shù)實(shí)現(xiàn)的挥吵。
- Javascript語言不熟的開發(fā)者重父,或者更熟悉Go語言的開發(fā)者,可以選擇使用Go語言來完成相關(guān)的操作而無需通過TiScript忽匈,可以通過Gox語言實(shí)現(xiàn)基本上所有的DOM操作和其他功能房午,由于Gox語言與Go語言(Golang)具有特殊的血脈關(guān)系,所以也可以發(fā)揮Go語言的后臺(tái)處理的強(qiáng)項(xiàng)優(yōu)勢(shì)丹允。
另外郭厌,作為功能非常強(qiáng)大的GUI編程庫(kù)袋倔,建議一定要充分閱讀參考Sciter官方的文檔,才能實(shí)現(xiàn)更復(fù)雜的GUI圖形界面編程折柠。我們也會(huì)陸續(xù)推出相應(yīng)的文章進(jìn)行更詳細(xì)的介紹和示例宾娜。
注意,另外扇售,Ubuntu系統(tǒng)運(yùn)行Gox語言時(shí)需要事先安裝GTK3的環(huán)境碳默,執(zhí)行下述命令即可安裝:
apt install libgtk-3-dev