栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang开发GUI桌面应用fyne(二)

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang开发GUI桌面应用fyne(二)

之前写过一篇使用 walk 包开发GUI,但是使用过程中发现walk封装的不是很好,虽然功能也很丰富,但是使用起来发现不太符合我的调用习惯,于是转而参考下 fyne 库。

源码:https://github.com/fyne-io/fyne

API文档:https://developer.fyne.io/

此包需要安装 gcc 编译工具。

exec: "gcc": executable file not found in %PATH%

去官网

https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

下载如下软件

https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe

安装

打开环境变量,找到 Path 那一栏,添加一行。

D:Program Filesmingw-w64x86_64-8.1.0-posix-seh-rt_v6-rev0mingw64bin

然后打开 cmd 运行gcc -v

demo 展示

go get fyne.io/fyne/v2/cmd/fyne_demo/
fyne_demo

看到输出了一个错误

Fyne error:  Failed to set dark mode

查了下 fyne issue ,有人提到了这个问题,作者也在回复,在当前版本v2.1.1还没有得到修复,但是并不影响使用。

但是在使用过程中发现中文会乱码,显然目前还不支持中文,需要手动设置,方法如下。

go get github.com/flopp/go-findfont

作用是找到当前操作系统上的已安装的字体列表,ttf, ttc。
func setFont() {
	fontPaths := findfont.List()
	for _, path := range fontPaths {
		// 微软雅黑-常规
		if strings.Contains(path, "msyh.ttc") {
			os.Setenv("FYNE_FONT", path)
			break
		}
	}
}

func main() {
	setFont()
	defer os.Unsetenv("FYNE_FONT")
	......
}

这样就能很好的支持中文了。

编译与压缩,隐藏CMD框

go build -ldflags="-H windowsgui -w -s"

设置图标
找到一个 png 的图片,放在项目根目录

// 步骤一
// 安装fyne工具
go get fyne.io/fyne/cmd/fyne

// 步骤二
// 将静态资源编译为 go 文件
fyne bundle fav.png >> bundled.go
// 如果是要追加资源
// fyne bundle -append image2.jpg >> bundled.go

// 步骤三
// 打开 bundled.go 文件会看到一个变量 resourceFavPng
// 修改代码,给 app 设置图标
// 这样,窗口图标,任务栏图标就设置好了
a := app.New()
a.SetIcon(resourceFavPng)

// 最后打包,使用 fyne package 而不是 go build
// fyne package 设置了可执行文件的图标,并且隐藏了CMD框,但是它默认的编译没有添加压缩参数。
fyne package -os windows -icon fav.png

至此,可执行文件,窗口图标,任务栏图标都有了。遗憾的是没法添加压缩参数 -ldflags="-H windowsgui -w -s"
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号