一、实现了登录结果弹窗展示

首先安装库:

go get github.com/lxn/walk

代码

package main

import (
	"fmt"

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

/*-------------------window界面-------------------*/
type MyMainWindow struct {
	*walk.MainWindow
	userCode *walk.LineEdit //用户名
	password *walk.LineEdit //密码
	results  *walk.TextEdit
}

func main() {
	mw := &MyMainWindow{}

	if _, err := (MainWindow{
		AssignTo: &mw.MainWindow,
		Title:    "test_GUI",
		Layout:   VBox{},
		Size:     Size{100, 100},
		Children: []Widget{
			GroupBox{
				Layout: Grid{Columns: 3},
				Children: []Widget{
					Label{
						Font:   Font{Family: "Consolas", PointSize: 13},
						Text:   "用户名:",
						Row:    1,
						Column: 1,
					},

					LineEdit{
						AssignTo: &mw.userCode,
						Font:     Font{Family: "Consolas", PointSize: 13},
						// MinSize:    Size{90, 30},不好用,和默认值冲突以默认值为准
						Row:    1,
						Column: 3,
						// ColumnSpan: 2,
					},
					Label{
						Font:   Font{Family: "Consolas", PointSize: 13},
						Text:   "密码:",
						Row:    2,
						Column: 1,
					},
					LineEdit{
						AssignTo:     &mw.password,
						Font:         Font{Family: "Consolas", PointSize: 13},
						PasswordMode: true,//密码用密文
						Row:          2,
						Column:       3,
						// ColumnSpan: 2,
					},
					PushButton{Text: "登录",
						Font:      Font{Family: "Consolas", PointSize: 11},
						OnClicked: mw.signIn2,
						Row:       3,
						Column:    3,
						// ColumnSpan: 3,
					},
				},
			},
		},
	}.Run()); err != nil {
		fmt.Printf("Run err: %+v\n", err)
	}
}

/*1	登录校验*/
func (mw *MyMainWindow) signIn2() {
	uname := mw.userCode.Text()
	pword := mw.password.Text()

	if uname == `admin` && pword == `admin` {
		Popup2(mw, `登录成功`)
	} else {
		Popup2(mw, `登录失败`)
	}
}

func Popup2(mw *MyMainWindow, str string) {
	// 按键结果以int形式返回
	// cmd :=walk.MsgBox(
	walk.MsgBox(
		mw,
		"提示",
		str,
		walk.MsgBoxOK,
		// walk.MsgBoxCancelTryContinue,
		// walk.MsgBoxYesNoCancel,
	)
	// switch cmd {
	// case walk.DlgCmdContinue:
	// 	results.SetText("click 是")
	// case walk.DlgCmdOK:
	// 	results.SetText("click 取消")
	// case walk.DlgCmdNo:
	// 	results.SetText("click 否")
	// }
}

还需要一个manifest文件。创建一个test.manifest文件,复制代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
    </dependency>
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
        </windowsSettings>
    </application>
</assembly>

执行命令生成rsrc.syso文件:

rsrc -manifest test.manifest -o rsrc.syso
//-ico temp.ico可用来设置生成的文件图标
rsrc -manifest test.manifest -ico temp.ico -o rsrc.syso 

编译程序

go build
//此时生成的文件会带个dos框,换个命令编译:
go build -ldflags="-H windowsgui"
go build -ldflags="-H windowsgui" -o "login.exe"

效果图在这里插入图片描述
接下来页面跳转
Popup2(mw, `登录成功`)
改为

mw.Close()
OpenWindow(uname)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐