zoukankan      html  css  js  c++  java
  • 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 得到的pkgmodgithub.comlxnwalk@v0.0.0-20191128110447-55ccb3a9f5c1examplesfilebrowser下面的

    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

  • 相关阅读:
    单例模式
    二、CSS
    十一、多线程
    十二、协程
    十、多进程
    九、内存管理
    八、元类
    七、上下文管理器/魔术方法
    六、单例模式
    五、装饰器
  • 原文地址:https://www.cnblogs.com/pu369/p/12341130.html
Copyright © 2011-2022 走看看