目前排名比較高的幾個UI庫
go get github.com/lxn/walk
go get github.com/andlabs/ui
go get github.com/ying32/govcl
簡單示例
- walk
package main
import (
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"strings"
)
func main() {
var inTE, outTE *walk.TextEdit
MainWindow{
Title: "SCREAMO",
MinSize: Size{600, 400},
Layout: VBox{},
Children: []Widget{
HSplitter{
Children: []Widget{
TextEdit{AssignTo: &inTE},
TextEdit{AssignTo: &outTE, ReadOnly: true},
},
},
PushButton{
Text: "SCREAM",
OnClicked: func() {
outTE.SetText(strings.ToUpper(inTE.Text()))
},
},
},
}.Run()
}
- ui
package main
import (
"github.com/andlabs/ui"
_ "github.com/andlabs/ui/winmanifest"
)
func main() {
err := ui.Main(func() {
name := ui.NewEntry()
button := ui.NewButton("Greet")
greeting := ui.NewLabel("")
box := ui.NewVerticalBox()
box.Append(ui.NewLabel("Enter your name:"), false)
box.Append(name, false)
box.Append(button, false)
box.Append(greeting, false)
window := ui.NewWindow("Hello", 200, 100, false)
window.SetChild(box)
button.OnClicked(func(*ui.Button) {
greeting.SetText("Hello, " + name.Text() + "!")
})
window.OnClosing(func(*ui.Window) bool {
ui.Quit()
return true
})
window.Show()
})
if err != nil {
panic(err)
}
}
- govcl
vcl.Application.Initialize()
mainForm := vcl.Application.CreateForm()
mainForm.SetCaption(context.WindowTitle)
mainForm.EnabledMaximize(false)
mainForm.ScreenCenter()
mainForm.SetOnCloseQuery(func(Sender vcl.IObject, CanClose *bool) {
*CanClose = vcl.MessageDlg("是否退出?", types.MtConfirmation, types.MbYes, types.MbNo) == types.IdYes
})
//菜單區(qū)域
mainMenu := vcl.NewMainMenu(mainForm)
item := vcl.NewMenuItem(mainForm)
item.SetCaption("File(&F)")
mainMenu.Items().Add(item)
item2 := vcl.NewMenuItem(mainForm)
item2.SetCaption("Settings")
item2.SetOnClick(func(vcl.IObject) {
vcl.ShowMessage("Click")
})
item.Add(item2)
vcl.Application.Run()
各庫的示例
-
walk
walk -
ui
ui govcl 示例太多,作者列出了表格 這里就不截圖了。
目錄下的例程并非所有都支持跨平臺,只有部分基礎(chǔ)組件支持跨平臺。
| 項目名(Project) | 說明(Description) | 平臺限制(Platform limit) |
|---|---|---|
| govcl | 開發(fā)govcl時的總測試?yán)?,包含很多功能的演?/td> | |
| action | "動作"組件演示,演示action的公用使用 | |
| basic | 基礎(chǔ)窗口 | |
| basicResForm | 演示設(shè)計器輸出的UI | |
| SkinsharpTest | skinsharp第三方皮膚演示 | Windows,32bit |
| checklistbox | 復(fù)選列表框演示 | |
| draganddrop | 數(shù)據(jù)拖放 | |
| draw | canvas自繪演示 | |
| dropfiles | 鼠標(biāo)拖放文件演示 | |
| eventpublic | 控件事件的公用演示 | |
| imagebutton | 四態(tài)圖控件演示 | |
| inifile | INI配置文件演示 | |
| layout | 基礎(chǔ)布局演示 | 部分限Windows |
| listboxcustomdraw | ListBox部分自繪演示 | |
| listview | ListView部分功能演示 | 部分限Windows |
| listviewcustomdraw | ListView部分自繪演示 | 部分限Windows |
| memstream | 內(nèi)存流演示 | |
| menu | 菜單演示 | |
| msgbox | 各種消息框演示 | |
| registry | windows注冊表演示 | Windows |
| richedit | windows富文本框演示 | Windows |
| statusbar | 狀態(tài)條演示 | |
| stdcontrols | 標(biāo)準(zhǔn)控件示例 | |
| style | windows下delphi樣式演示 | Windows,libvcl |
| sysdialog | 各種系統(tǒng)對話框演示 | |
| trayicon | 系統(tǒng)拖盤圖標(biāo)演示 | Windows MacOS |
| treeview | 樹型列表框演示 | |
| wingif | windows下gif圖片播放演示 | 部分限Windows |
| wkeWebBrowser | windows下wke瀏覽器嵌入演示 | Windows,32bit |
| xunleidownloader | 迅雷下載引擎演示 | Windows,32bit |
| OSVersion | 系統(tǒng)版本信息獲取 | |
| WindowsMessages | Windows下消息捕獲 | Windows |
| WindowsProcess | Windows進(jìn)程列表 | Windows |
| WindowsTest | Windows下的一些測試 | Windows |
| simpleIM | 簡單的群聊,基于TCP | |
| notepad | 簡單仿Windows記事本 | |
| formEvents | 演示自動關(guān)聯(lián)事件 | |
| gdiplustest | GDI+畫漸變文字及半透明背景 | Windows |
| gdiplustest2 | 移植自Delphi IGDIPlus例程的 | Windows |
| imageviewer | 一個圖片瀏覽器 | |
| windowsspy | Windows下的一個窗口信息查看,類型于spy++ | Windows |
| grids/stringgrid | 表格控件1 | |
| grids/drawgrid | 表格控件2 | |
| syslocale | 本地化相關(guān) | |
| shortcut | 快捷方式相關(guān) | Windows |
| winole | 使用go-ole庫操作ole | Windows |
| virtuallistview | 虛擬TListView,用于大數(shù)據(jù)顯示 | |
| winTaskbar | windows任務(wù)欄相關(guān),只支持libvcl,win7+ | Windows,libvcl,win7+ |
| winJumpList | windows任務(wù)欄,跳轉(zhuǎn)列表,只支持libvcl,win7+ | Windows,libvcl,win7+ |
| res2goTest | res2go 工具測試?yán)?/td> | |
| messageTest | 跨平臺的窗口消息捕獲,與WindowsMessages例程功能一樣,只是可以跨平臺 | |
| printer | 打印機(jī)操作 | |
| multilanguage | 多國語言演示例程 | |
| miniwebview | 跨平臺瀏覽器組件演示 | libvcl, liblcl, liblcl macOS,cocoa |
| jsonTogo | 將一段json數(shù)據(jù)轉(zhuǎn)為Go的結(jié)構(gòu),以方便json.Unmarshal填充 | |
| jsonViewer | 將一段json數(shù)據(jù)以樹的形式顯示 |
我簡單的做了對比 最后決定使用govcl ,相比較walk,ui。govcl 庫示例多,可以部分做到跨平臺。windows,mac,linux等??垂倏梢愿鶕?jù)自己的實際情況選擇。

