- 简介
lxn/walk 是一个用于创建 Windows 图形用户界面(GUI)的 Go 语言库。它提供了一套简单易用的 API,可以用来创建各种窗口、对话框、按钮、标签、文本框等控件。在本教程中,我们将学习如何使用 lxn/walk 来创建一个简单的 GUI 应用程序。
- 安装
首先,我们需要安装 lxn/walk。可以通过在终端中使用以下命令来进行安装:
go get github.com/lxn/walk
go get github.com/akavel/rsrc ## 这个工具是用来生成.syso文件的,如果再cmd终端找不到rsrc命令,可以到GoPath或者GoRoot的/pkg/mod/github.com/akavel/rsrc目录下,执行go build命令,生成rsrc.exe文件,防止到/bin目录下
- 创建窗口
创建窗口是第一步。下面的代码演示了如何创建一个简单的窗口:
package main
import (
"github.com/lxn/walk"
)
func main() {
mw, _ := walk.NewMainWindow()
mw.SetTitle("Hello, World!")
mw.SetSize(walk.Size{Width: 300, Height: 200})
mw.SetLayout(walk.NewVBoxLayout())
mw.Show()
mw.Run()
}
这个程序会创建一个带有标题“Hello, World!”的窗口,并将其显示在屏幕上。NewMainWindow
函数用来创建一个主窗口对象,SetTitle
函数用来设置窗口标题,SetSize
函数用来设置窗口大小,Show
函数用来显示窗口。最后,我们使用 walk.Run
函数来启动应用程序的消息循环,使窗口可以响应用户的操作。
- 创建清单文件app.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将manifest文件转成syso文件
rsrc -manifest app.manifest -o app.syso # 如果不改版本,只要生成一次就行,可以重复使用
- 编译独立的exe文件,并双击运行即可 命令如下:
go build -ldflags="-H windowsgui"
运行结果:
- 添加控件
下一步是添加控件。下面的代码演示了如何在窗口中添加一个标签和一个按钮:
package main
import (
"github.com/lxn/walk"
)
func main() {
mw, _ := walk.NewMainWindow()
mw.SetTitle("Hello, World!")
mw.SetSize(walk.Size{300, 200})
label, _ := walk.NewLabel(mw)
label.SetText("Hello, World!")
label.SetBounds(walk.Rectangle{20, 20, 100, 20})
button, _ := walk.NewPushButton(mw)
button.SetText("Click me!")
button.SetBounds(walk.Rectangle{20, 50, 80, 30})
button.Clicked().Attach(func() {
walk.MsgBox(mw, "Message", "Hello, World!", walk.MsgBoxIconInformation)
})
mw.Show()
walk.Run()
}
这个程序在之前的代码的基础上添加了一个标签和一个按钮。NewLabel
函数用来创建一个标签对象,SetText
函数用来设置标签文本,SetBounds
函数用来设置标签位置和大小。同样,我们使用 NewPushButton
函数来创建一个按钮对象,SetText
函数用来设置按钮文本,SetBounds
函数用来设置按钮位置和大小。我们还添加了一个回调函数,当按钮被点击时,它会显示一个对话框,提示用户“Hello, World!”。
显示结果:
- 未完待续......