Go開發(fā)桌面應(yīng)用UI庫選擇

目前排名比較高的幾個UI庫

go get github.com/lxn/walk
go get github.com/andlabs/ui
go get github.com/ying32/govcl

簡單示例

  1. 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()
}
  1. 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)
    }
}
  1. 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()

各庫的示例

  1. walk


    walk
  2. ui


    ui
  3. 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ù)自己的實際情況選擇。

文檔地址
  1. walk文檔地址
  2. ui文檔地址
  3. govcl文檔地址
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容