首先安装库:
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文件,复制代码:
<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, PerMonitordpiAwareness>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">TruedpiAware>
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"
效果图
接下来页面跳转
Popup2(mw, `登录成功`)
改为
mw.Close()
OpenWindow(uname)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)