美文网首页GoGolang程序员
Go开发桌面应用UI库选择

Go开发桌面应用UI库选择

作者: 我们都很努力着 | 来源:发表于2019-04-09 10:42 被阅读11次

    目前排名比较高的几个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文档地址

    相关文章

      网友评论

        本文标题:Go开发桌面应用UI库选择

        本文链接:https://www.haomeiwen.com/subject/scgviqtx.html