Go语言:Windows下最能凑合用的桌面GUI库(lxn/walk 起步教程) - pu369com

时间:2024-03-04 07:34:57

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\walk@v0.0.0-20191128110447-55ccb3a9f5c1\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