go html界面,go开发 windows GUI界面

一、环境配置

1、使用go modules新建 一个工程。

2、开始写一个简单的GUI测试程序,新建main.go写入代码。

3、执行 >> go build -ldflags="-H windowsgui"

下载依赖,并生成可执行文件。(此处生成的文件还无法执行)

4、在工程下新建一个 test.minifest文件,内容如下:

PerMonitorV2, PerMonitor

True

5、还需要一个golang包: go get github.com/akavel/rsrc

到该包下执行go build. 生成 rsrc.exe文件。

该包用于在程序中嵌入二进制资源的工具

将文件复制到GOROOT/bin 下面 。

再回到代码目录执行>> rsrc -manifest test.manifest -o rsrc.syso

6、通过上述配置后再执行: >> go build -ldflags="-H windowsgui"

生成main.exe可执文件,运行结果如下:

8053e0b17206

image.png

package main

import (

"fmt"

"log"

"os"

"strings"

)

import (

"github.com/lxn/walk"

. "github.com/lxn/walk/declarative"

)

func main() {

mw := &MyMainWindow{model: NewEnvModel()}

if _, err := (MainWindow{

AssignTo: &mw.MainWindow,

Title: "Walk ListBox Example",

MinSize: Size{240, 320},

Size: Size{300, 400},

Layout: VBox{MarginsZero: true},

Children: []Widget{

HSplitter{

Children: []Widget{

ListBox{

AssignTo: &mw.lb,

Model: mw.model,

OnCurrentIndexChanged: mw.lb_CurrentIndexChanged,

OnItemActivated: mw.lb_ItemActivated,

},

TextEdit{

AssignTo: &mw.te,

ReadOnly: true,

},

},

},

},

}.Run()); err != nil {

log.Fatal(err)

}

}

type MyMainWindow struct {

*walk.MainWindow

model *EnvModel

lb *walk.ListBox

te *walk.TextEdit

}

func (mw *MyMainWindow) lb_CurrentIndexChanged() {

i := mw.lb.CurrentIndex()

item := &mw.model.items[i]

mw.te.SetText(item.value)

fmt.Println("CurrentIndex: ", i)

fmt.Println("CurrentEnvVarName: ", item.name)

}

func (mw *MyMainWindow) lb_ItemActivated() {

value := mw.model.items[mw.lb.CurrentIndex()].value

walk.MsgBox(mw, "Value", value, walk.MsgBoxIconInformation)

}

type EnvItem struct {

name string

value string

}

type EnvModel struct {

walk.ListModelBase

items []EnvItem

}

func NewEnvModel() *EnvModel {

env := os.Environ()

m := &EnvModel{items: make([]EnvItem, len(env))}

for i, e := range env {

j := strings.Index(e, "=")

if j == 0 {

continue

}

name := e[0:j]

value := strings.Replace(e[j+1:], ";", "\r\n", -1)

m.items[i] = EnvItem{name, value}

}

return m

}

func (m *EnvModel) ItemCount() int {

return len(m.items)

}

func (m *EnvModel) Value(index int) interface{} {

return m.items[index].name

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值