Go开发桌面应用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
    })
    //菜单区域
    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 示例太多,作者列出了表格 这里就不截图了。

目录下的例程并非所有都支持跨平台,只有部分基础组件支持跨平台。

项目名(Project) 说明(Description) 平台限制(Platform limit)
govcl 开发govcl时的总测试例程,包含很多功能的演示
action "动作"组件演示,演示action的公用使用
basic 基础窗口
basicResForm 演示设计器输出的UI
SkinsharpTest skinsharp第三方皮肤演示 Windows,32bit
checklistbox 复选列表框演示
draganddrop 数据拖放
draw canvas自绘演示
dropfiles 鼠标拖放文件演示
eventpublic 控件事件的公用演示
imagebutton 四态图控件演示
inifile INI配置文件演示
layout 基础布局演示 部分限Windows
listboxcustomdraw ListBox部分自绘演示
listview ListView部分功能演示 部分限Windows
listviewcustomdraw ListView部分自绘演示 部分限Windows
memstream 内存流演示
menu 菜单演示
msgbox 各种消息框演示
registry windows注册表演示 Windows
richedit windows富文本框演示 Windows
statusbar 状态条演示
stdcontrols 标准控件示例
style windows下delphi样式演示 Windows,libvcl
sysdialog 各种系统对话框演示
trayicon 系统拖盘图标演示 Windows MacOS
treeview 树型列表框演示
wingif windows下gif图片播放演示 部分限Windows
wkeWebBrowser windows下wke浏览器嵌入演示 Windows,32bit
xunleidownloader 迅雷下载引擎演示 Windows,32bit
OSVersion 系统版本信息获取
WindowsMessages Windows下消息捕获 Windows
WindowsProcess Windows进程列表 Windows
WindowsTest Windows下的一些测试 Windows
simpleIM 简单的群聊,基于TCP
notepad 简单仿Windows记事本
formEvents 演示自动关联事件
gdiplustest GDI+画渐变文字及半透明背景 Windows
gdiplustest2 移植自Delphi IGDIPlus例程的 Windows
imageviewer 一个图片浏览器
windowsspy Windows下的一个窗口信息查看,类型于spy++ Windows
grids/stringgrid 表格控件1
grids/drawgrid 表格控件2
syslocale 本地化相关
shortcut 快捷方式相关 Windows
winole 使用go-ole库操作ole Windows
virtuallistview 虚拟TListView,用于大数据显示
winTaskbar windows任务栏相关,只支持libvcl,win7+ Windows,libvcl,win7+
winJumpList windows任务栏,跳转列表,只支持libvcl,win7+ Windows,libvcl,win7+
res2goTest res2go 工具测试例程
messageTest 跨平台的窗口消息捕获,与WindowsMessages例程功能一样,只是可以跨平台
printer 打印机操作
multilanguage 多国语言演示例程
miniwebview 跨平台浏览器组件演示 libvcl, liblcl, liblcl macOS,cocoa
jsonTogo 将一段json数据转为Go的结构,以方便json.Unmarshal填充
jsonViewer 将一段json数据以树的形式显示

我简单的做了对比 最后决定使用govcl ,相比较walk,ui。govcl 库示例多,可以部分做到跨平台。windows,mac,linux等。看官可以根据自己的实际情况选择。

文档地址
  1. walk文档地址
  2. ui文档地址
  3. govcl文档地址
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容