Go语言:Windows下最能凑合用的桌面GUI库(lxn/walk 起步教程)
1、封闭环境首先得GO111MODULE、GOPROXY,参考我之前文章https://www.cnblogs.com/pu369/p/12068645.html
2、前置安装
go get github.com/akavel/rsrc go get github.com/lxn/win go get github.com/lxn/walk
由于我是在liteide下,按CTRL+B 时自动生成了go.mod和go.sum;就不用自己运行go mod命令了。
3、代码实例:
由于参考网上代码不成功,改用以下办法测试
将go get 得到的pkg\mod\github.com\lxn\[email protected]\examples\filebrowser下面的
filebrowser.go和rsrc.syso复制到自己的项目目录(如:名为gowalk)下,并将filebrowser.go改名为main.go
4、在自己的项目目录(如:名为gowalk)下,cmd命令行,正式编译
go build -ldflags="-H windowsgui -w -s"
(也可在liteid中设置BUILDAGRS 后添加 -ldflags "-H windowsgui" ,参考我之前写的https://www.cnblogs.com/pu369/p/10336699.html)
5、双击生成的EXE运行,成功。
据说不动态添加控件的话,可在布局 Children: []Widget 中或者QT设计器设计UI文件,然后加载。
6、最终测试代码:
// Copyright 2011 The Walk Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "log" "time" ) import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) func main() { var mainWindow *walk.MainWindow var a *walk.PushButton if err := (MainWindow{ AssignTo: &mainWindow, Title: "Walk File Browser Example", MinSize: Size{600, 400}, Size: Size{1024, 640}, Layout: HBox{MarginsZero: true}, Children: []Widget{ PushButton{ Text: "点击我修改按钮标题", AssignTo: &a, OnClicked: func() { update(a) //方法1。或者直接把a作为全局变量,无需传递a 。或者直接定义结构体,添加方法。 }, }, }, }.Create()); err != nil { log.Fatal(err) } mainWindow.Run() } func update(a *walk.PushButton) { a.SetText("点击我修改按钮标题" + time.Now().String()) }
参考:https://www.jianshu.com/p/28f371a378f0
https://my.oschina.net/u/248241/blog/861841