Golang對網路來說是門友善的語言
對於UI
其實搭配使用web的方式會比較好
擴展性高,支援多個平台
但桌面型式的UI(GUI)在目前也是不可取代的
Golang也是有GUI的項目
但還不像是Qt那樣的方便及資源眾多
- lxn/walk – 只能用於windows下的UI庫
- therecipe/qt – Golang的qt綁定庫
- go-astilectron – Golang與electron的交互,基於html、css
- zserge/lorca – 一樣是基於html、css的UI,與go-astilection不一樣的是,在打包的時候不會把整個electron包進去,所以程式會小很多
- fyne-io/fyne – golang原生UI庫,目前還在更新
以上介紹筆者用過的
其它可在awesomego裡找看看有無符合看官需求
lxn/walk不是跨平台的
go-astilectron跟zserge/lorca都是用html的方式構建
go-astilectron就是本來electron的後端由nodejs改成golang
build的時候就跟electron build出來有一樣的缺點,就是很大包
但lorca則是改成使用使用者安裝的瀏覽器,讓執行檔有效的變小
如果不想用到html系列的話
還有therecipe/qt跟fyne-io/fyne可以用
但therecipe/qt在筆者環境下(ubuntu18.04)
qt環境一直搞不起來
設定也很復雜…
而fyne-io就相對的單純許多
因是原生支援,不用綁定cgo
但也是很多缺點
預設為material design
控件不能客制化,意謂著不能設計很誇張很漂亮的UI
目前也不支援UI顯示中文
開發團隊有努力的在滿足大家的需求
也持續的更新中
是筆者想投資的方向之一
雖然筆者本身會用C++ Qt Framework、pyside
但C++不好寫,pyside因是python顯得很慢
所以才會想用golang從中取得平衡
fyne的控件目前有這麼多種
對於簡單的應用應該也是夠了
於fyne/widget中定義
也有客制化的fyne/canvas
widget的struct定義中包含2個屬性
type Widget interface { CanvasObject CreateRenderer() WidgetRenderer}
CanvasObject負責這個控件的行為跟狀態
WidgetRenderer負責控件在畫面上的繪出
上面有提到
fyne不太能客制化
所以Renderer在基礎的我們就不會去碰到
至於排版的部分
則是跟Qt一樣用Layout(應該大部份的GUI都是吧?)
但沒有像Qt design那樣的IDE
在Widget中放入NewContainerWithLayout
Widget當父元件,NewContainerWithLayout為他的子元件
NewContainerWithLayout下面再增加子控件
除了官網的範例
在我的github有試做給自己的GUI(還在開發中)
也可以參考看看喔
佶曰:Qt真得很強大
沒有留言:
張貼留言