go 第三方GUI和编译 andlabs/ui、andlabs/libui在win10的部署使用
1.下载安装andlabs/ui、andlabs/libui
项目终端中(输入命令):
go get github.com/andlabs/ui
go get github.com/andlabs/libui
会在gopath路径/src/github.com/andlabs下
或者手动在github下载放进来也成的哈;目录结构如图:
报错:
exec: “gcc”: executable file not found in %PATH%
没有针对c语言的gcc,安装一个
D:/sdk/go1.13.4/bin/src/github.com/andlabs/ui/libui_windows_amd64.a(stddialogs.cpp.obj): In function msgbox': C:/projects/libui/windows/stddialogs.cpp:113: undefined reference to
__imp_TaskDialog’
collect2.exe: error: ld returned 1 exit status
安装mingw64(这个是重点): http://www.msys2.org/
2.下载配置gcc环境:
将下载的 msys2-x86_64-版本号xxx.exe 安装在 C:/msys64/ 目录下
pacman 命令警告:无法获取某些文件 错误:无法提交处理 (下载数据库出错) 发生错误,没有软件包被更新
无法从 sourceforge.net : Resolving timed out after 10000 milliseconds 获取文件
pacman -Sy
pacman -S --needed filesystem msys2-runtime bash libreadline libiconv libarchive libgpgme libcurl pacman ncurses libintl
pacman -S mingw-w64-x86_64-gcc
不断地重试,直到正常安装完依赖和gcc即可
添加到环境变量
C:\msys64\mingw64\bin
3.编码编译
编译代码 不带控制台
go build -ldflags="-H windowsgui" guiTest.go
添加图标,只支持ico,失败:不能生成syso文件,先按下;
demo效果没放上来,想做出一个小工具在说。
guiCountTime.go
package main
import (
"github.com/andlabs/ui"
_ "github.com/andlabs/ui/winmanifest"
"strconv"
"time"
)
/*andlabs这个gui库缺点太大,最不能容忍的是组件缺少,窗口属性缺少,就连颜色什么的也没有,可以说是相当鸡肋了,可以弃用*/
func main() {
err := ui.Main(func() {
box := ui.NewVerticalBox() // 生成:垂直容器
weekday := time.Now().Weekday()
greet := ui.NewLabel("阖家团圆")
box.Append(greet, false)
content := "今天是" + weekday.String() + ",要开心哦~"
greet.SetText(content)
box.Append(ui.NewHorizontalSeparator(), false) // 分割线
// 日期时间
box.Append(ui.NewLabel("起始时间"), false)
t1 := ui.NewDateTimePicker()
box.Append(t1, false)
box.Append(ui.NewLabel("终止时间"), false)
t2 := ui.NewDateTimePicker()
box.Append(t2, false)
countButton := ui.NewButton("计算时差")
result := ui.NewEntry()
result.SetReadOnly(true)
box.Append(countButton, false)
box.Append(result, false)
countButton.OnClicked(func(*ui.Button) {
sumM := t2.Time().Sub(t1.Time()).Minutes()
res := strconv.FormatFloat(sumM, 'f', -1, 64)
res = res + string("分钟")
result.SetText(res)
})
// 生成:窗口(标题,宽度,高度,是否有 菜单 控件)
window := ui.NewWindow(`Time Count Tools`, 250, 150, true)
window.SetChild(box) // 窗口容器绑定
window.OnClosing(func(*ui.Window) bool { // 设置:窗口关闭时
ui.Quit() // 窗体关闭
return true
})
// 窗体显示
window.Show()
})
if err != nil {
panic(err)
}
}
执行命令go build -ldflags="-H windowsgui" guiCountTime.go即可编辑成guiCountTime.exe,并且不带console控制台。
4.总结
如代码中的注释:andlabs这个go gui语言的三方库不值得学习和入门,有时间我会再尝试玩一下其他gui库,虽然这样了解和使用go语言不是一个好的方法。