GoGolang程序员

Go开发桌面应用UI库选择

2019-04-09  本文已影响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文档地址
上一篇下一篇

猜你喜欢

热点阅读