目前排名比较高的几个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
})
//菜单区域
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 示例太多,作者列出了表格 这里就不截图了。
目录下的例程并非所有都支持跨平台,只有部分基础组件支持跨平台。
项目名(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等。看官可以根据自己的实际情况选择。
网友评论