Go 编译错误: 'OnClosing' 字段不存在于 walk.MainWindow 结构体中
Go 编译错误: 'OnClosing' 字段不存在于 walk.MainWindow 结构体中
错误原因
在声明 MainWindow 时,使用了 OnClosing 字段,但是该字段在 walk.MainWindow 结构体中并不存在。
解决方法
将 OnClosing 字段改为 OnSizeChanged。因为 walk.MainWindow 结构体中存在 OnSizeChanged 字段,可以使用该字段代替 OnClosing。
修改后的代码
package main
import (
"fmt"
"github.com/gen2brain/dlgs"
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"io"
"net/http"
"os"
"path/filepath"
)
func downloadFile(url string, filepath string) error {
// 创建文件
out, err := os.Create(filepath)
if err != nil {
return err
}
defer out.Close()
// 发送请求并下载文件
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
// 写入文件
_, err = io.Copy(out, resp.Body)
if err != nil {
return err
}
return nil
}
func writeIni(name string) error {
// 获取用户目录
userDir, err := os.UserHomeDir()
if err != nil {
return err
}
// 获取配置文件路径
iniPath := filepath.Join(userDir, "HC.ini")
// 创建配置文件
f, err := os.Create(iniPath)
if err != nil {
return err
}
defer f.Close()
// 写入配置
_, err = f.WriteString("[general]
")
if err != nil {
return err
}
return nil
}
func main() {
var (
entry *walk.LineEdit
mainWindow *walk.MainWindow
)
// 创建GUI界面
MainWindow{
AssignTo: &mainWindow,
Title: '证书下载和配置',
MinSize: Size{Width: 300, Height: 100},
Layout: VBox{},
Children: []Widget{
LineEdit{
AssignTo: &entry,
},
PushButton{
Text: '下载证书并写入配置',
OnClicked: func() {
// 获取编辑框内容
entryText := entry.Text()
// 如果编辑框内容为空,则提示错误信息
if entryText == '' {
dlgs.Error('错误', '请输入编号')
return
}
// 下载证书
filepath := filepath.Join(os.Getenv('USERPROFILE'), 'Desktop', 'mitmproxy-ca-cert.p12')
err := downloadFile('http://mitm.it/cert/p12', filepath)
if err != nil {
dlgs.Error('错误', fmt.Sprintf('下载证书失败: %v', err))
return
}
// 写入配置文件
err = writeIni(entryText)
if err != nil {
dlgs.Error('错误', fmt.Sprintf('写入配置文件失败: %v', err))
return
}
// 提示设置完成信息
dlgs.Info('信息', '设置完成,证书已下载到桌面请手动安装')
},
},
},
OnSizeChanged: func() {
mainWindow.Hide()
},
}.Run()
}
说明
OnSizeChanged 字段用于监听窗口大小变化,在窗口大小变化时执行回调函数。在本例中,回调函数中隐藏了主窗口。
其他
如果需要在窗口关闭时执行其他操作,可以使用 OnClosing 字段,但需要将其添加到 walk.MainWindow 结构体中。
希望以上解决方案能够帮助您解决问题。如果您有任何疑问,请随时提问。
原文地址: https://www.cveoy.top/t/topic/nRQd 著作权归作者所有。请勿转载和采集!