默认 fyne 不支持中文的,如果我们在界面上显示中文会乱码。
下面介绍两种解决方法
配置地址路径 | 编译字体文件为二进制文件 | |
---|---|---|
打包文件大小 | 小(无需包含字体文件) | 大(内含二进制的字体文件) |
可移植性 | 需要用户重新配置字体文件配置 | 开箱即用 |
配置地址路径
从网络下载或从
C:\Windows\Fonts
下拷贝字体文件(.ttf
)下面是两个相关issue:
拷贝到目标目录下
os.Setenv("FYNE_FONT", "字体文件路径") //设置env环境
- 但是这样设置只能解决本地运行的乱码,在打包完后还是会乱码
- 下面则需要进行
编译字体文件为二进制文件
安装 fyne CLI
go install fyne.io/fyne/v2/cmd/fyne@latest
使用fyne CLI
打包
在项目根目录下面运行下面命令(使用 cmd ),生成bundled.go
文件
fyne bundle msyh.ttc >> bundled.go
# 打包粗体
fyne bundle -append msyhbd.ttc >> bundled.go
该文件就是字体的二进制文件
注意:执行该命令我们要使用 cmd,不要使用
powershell
,也不能使用vscode自带的终端,powershell
会生成utf-16的字符编码文件,导致编译失败。
创建主题theme.go
在项目根目录下面创建一个theme.go
文件,内容如下:
package main
import (
"image/color"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/theme"
)
type myTheme struct{}
var _ fyne.Theme = (*myTheme)(nil)
// return bundled font resource
func (*myTheme) Font(s fyne.TextStyle) fyne.Resource {
if s.Monospace {
return theme.DefaultTheme().Font(s)
}
if s.Bold {
if s.Italic {
return theme.DefaultTheme().Font(s)
}
return resourceMsyhbdTtc
}
if s.Italic {
return theme.DefaultTheme().Font(s)
}
return resourceMsyhTtc
}
func (*myTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
return theme.DefaultTheme().Color(n, v)
}
func (*myTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
return theme.DefaultTheme().Icon(n)
}
func (*myTheme) Size(n fyne.ThemeSizeName) float32 {
return theme.DefaultTheme().Size(n)
}
Font方法中的两个返回值,到生成的
bundled.go
中可以找到
修改main.go
使用该主题
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
myApp := app.New()
// 设置主题
myApp.Settings().SetTheme(&myTheme{})
myWindow := myApp.NewWindow("golang技术栈")
label := widget.NewLabel("golang技术栈(golang-tech-stack.com)-老郭")
myWindow.SetContent(label)
myWindow.Show()
myApp.Run()
}
运行项目查看结果
go run .\main.go .\theme.go .\bundled.go
当然goland直接运行就行