-1、注意
1.fyne不支持修改窗口位置。相关链接:https://github.com/fyne-io/fyne/compare/master…lukx33:fyne:position、https://github.com/lukx33/fyne/tree/position、https://github.com/fyne-io/fyne/issues/311
2.最小化fyne窗口容易白屏
3.OnFocusLost无法使用,fyne声称entry有失焦事件,源码里也有,但是用不出来。(golang:首字母大写,代表对外部可见,所以focused要改为Focused,然后轮询Focused)
4.The size of all items is set by the parent container’s layout. 这意味着自定义小部件的尺寸很麻烦。
5.golang的err好逆天啊😑
1、下载GO
Go语言中文网
golang安装包 - 阿里镜像站(镜像站使用方法:查找最新非rc版本的golang安装包)
golang安装包 - 中科大镜像站
go二进制文件下载 - 南京大学开源镜像站
Go语言官网(Google中国)
Go语言官网(Go团队)
截至目前(2023年9月17日),Go语言(Golang)的最新版本是Go 1.21.1。
所以下载的文件名为go1.21.1.windows-amd64.msi
2、安装GO
双击打开go1.21.1.windows-amd64.msi
,一直选择Next
,最后选择Install
即可,点击Finish
结束安装。
(或者自行更改安装位置)
新建命令行窗口,运行命令go version
,如果输出类似go version go1.21.1 windows/amd64
的版本信息则安装成功。
3、配置代理
运行命令cmd.exe /c "go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct"
配置代理
运行命令go env
查看是否有GO111MODULE=on
和GOPROXY=https://goproxy.cn,direct
参考:
1.代理配置方法 - goproxy.cn(往下滑动网页就是用法介绍)
2.代理配置方法 - goproxy.io
4、安装VSCode
4.1安装
(注意:已安装旧版本VSCode,建议更新到最新版本)
访问这个👉链接:如何下载安装VSCode
安装插件:简体中文、Go
4.2配置
在VSCode中点击F1
显示所有命令,输入框搜索>Go: Install/Update Tools
,点击搜索到的命令
全选所有可用的 Go 工具,点击 OK 按钮,等待输出(安装过程无任何输出,预计时间:6分钟)。
(如果弹出提示说哪个没安装,不用管,在安了,在安了,VSCode比我都急😓)
4.3完成
All tools successfully installed. You are ready to Go. :)
说明安装完毕。
配置完毕后,关闭VSCode。
参考为 Go 开发配置Visual Studio Code - Go on Azure | Microsoft Learn
4.4不让VSCode擅自删除未识别的包
(先写import后写代码点保存直接把导入删了???那我不白写了么?)
VSCode,点击左下角齿轮
图标,选择配置文件(默认)
,显示配置文件内容
,打开settings.json
添加如下内容(这需要另行学习json文件格式的知识,不然设置无效)
"[go]": {
"editor.codeActionsOnSave": {
"source.organizeImports": false
}
},
5、写代码
5.1创建
运行PowerShell命令mkdir hello_go;cd hello_go;New-Item main.go;go mod init hello_go;code .
5.2编辑
编辑文件.\hello_go\main.go
(格式化快捷键Shift+Alt+F
)
package main // 声明 main 包,表明当前是一个可执行程序
import "fmt" // 导入内置 fmt
func main() { // main函数,是程序执行的入口
fmt.Println("Hello World!") // 在终端打印 Hello World!
}
快捷键Ctrl+S
保存文件。
5.3调试
(遇到 VSCode 通过防火墙的提示,勾选网络,点击允许访问。)
按F5
启动调试
成功输出Hello World!
5.4编译
运行命令go build
运行命令.\hello_go.exe
6、安装fyne库
1.Fyne v2 版本的框架包
运行go get fyne.io/fyne/v2
2.Fyne 的命令行工具
运行go install fyne.io/fyne/v2/cmd/fyne@latest
3.go-findfont(顺带就安装了)
运行go get github.com/flopp/go-findfont
7、安装msys2
7.1下载
中科大镜像
清华大学开源软件镜像站
南京大学开源镜像站
北京外国语大学开源软件镜像站
上海交通大学
msys2官网
下载msys2-x86_64-20230718.exe
7.2安装
1.双击msys2-x86_64-20230718.exe
运行安装包
2.记录安装位置,不知道位置和没安装一样
3.开始菜单快捷方式不要动,直接点击下一步
4.等待安装
5.取消勾选立即运行 MSYS2
7.3更新安装
1.Windows开始菜单搜索MSYS2 MINGW64
,打开该软件(%AppData%\Microsoft\Windows\Start Menu\Programs\MSYS2)
2.运行pacman -Syu
Proceed with installation? [Y/n],直接点击回车即可(默认的选择就是Y)
To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]
直接点击回车即可(默认的选择就是Y)
3.在Windows开始菜单再次搜索MSYS2 MINGW64
并打开该软件
4.运行pacman -S git mingw-w64-x86_64-toolchain
Enter a selection (default=all):
直接点击回车即可(默认的选择就是all)
Proceed with installation? [Y/n],直接点击回车即可(默认的选择就是Y)
光标跳动则安装完成,关闭窗口
7.4环境变量
1.找到gcc.exe的位置(找不到的用Everything搜索)
2.默认位置为C:\msys64\mingw64\bin
3.访问rapidee官网下载软件Rapid Environment Editor
下载地址https://www.rapidee.com/download/RapidEEx64.zip
4.右键rapidee.exe以管理员身份运行
5.改为中文
6.左侧找到Path,右键Path,选择添加值
7.写入gcc.exe文件的实际所在文件夹(默认位置为C:\msys64\mingw64\bin
),回车确认输入
8.点击保存,关闭软件
7.5判断安装成功
访问判断工具下载地址
解压后运行Fyne Setup.exe
8、清空原hello代码重新编辑main.go
8.1编辑
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Hello, World!")
w.SetContent(widget.NewLabel("Hello, world!"))
w.ShowAndRun()
}
编辑完有很多报错
运行go mod tidy
后,等待一下就恢复了,报错就没有了
8.2编译
运行命令go build
运行命令.\hello_go.exe
9、中文支持(findfont)
9.0安装
其实之前安装过了,不小心弄没了就再安装一下
安装go-findfont
运行go get github.com/flopp/go-findfont
9.1编辑
清空原代码重新编辑main.go
package main
import (
"os"
"strings"
"github.com/flopp/go-findfont"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func init() {
//设置中文字体:解决中文乱码问题(很明显,这是Windows平台的方案,苹果电脑哪来的微软雅黑?)
fontPaths := findfont.List()
for _, path := range fontPaths {
// 微软雅黑 msyh.ttf
// 黑体 simhei.ttf
// 宋体 SIMSUN.TTF
// 楷体 simkai.ttf
if strings.Contains(path, "msyh.ttf") || strings.Contains(path, "simhei.ttf") || strings.Contains(path, "simsun.ttc") || strings.Contains(path, "simkai.ttf") {
os.Setenv("FYNE_FONT", path)
break
}
}
}
func main() {
a := app.New()
w := a.NewWindow("你好 世界!")
w.Resize(fyne.NewSize(240, 40))
w.SetContent(widget.NewLabel("哈喽 沃德!"))
w.ShowAndRun()
}
编辑完可能会有警告,运行go mod tidy
修复
9.2编译
运行命令go build
运行命令.\hello_go.exe
10、中文支持(bundle)
10.1在main.go
中删除不用的findfont
最终结果如下
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
w := a.NewWindow("你好 世界!")
w.Resize(fyne.NewSize(240, 40))
w.SetContent(widget.NewLabel("哈喽 沃德!"))
w.ShowAndRun()
}
运行go mod tidy
,去掉在go.mod
中记录的 findfont 依赖项
10.2下载字体
访问猫啃网下载霞鹜漫黑
解压后获得字体文件.\霞鹜漫黑0.200_猫啃网\霞鹜漫黑\LXGWMarkerGothic-Regular.ttf
10.3打包字体
(打包字体时禁止以任何形式使用PowerShell直接调用fyne bundle,但是可以使用PowerShell调用cmd调用fyne bundle)
在字体文件所在文件夹.\霞鹜漫黑0.200_猫啃网\霞鹜漫黑
运行cmd.exe /c "fyne bundle LXGWMarkerGothic-Regular.ttf >> bundle.go"
得到.\霞鹜漫黑0.200_猫啃网\霞鹜漫黑\bundle.go
10.3主题
1.在项目中新建文件夹.\hello_go\theme
2.将bundle.go
复制到项目中:.\hello_go\theme\bundle.go
3.将bundle.go
中的package main
改为package theme
(包名需要与其所在的文件夹名称相同)
4.新建自定义主题文件.\hello_go\theme\theme.go
(后记:忘记首字母大写,自己改吧,反正编辑器会报错(首字母大写,代表对外部可见))
package theme
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/theme"
"image/color"
)
type MyTheme struct{}
var _ fyne.Theme = (*MyTheme)(nil)
// return bundled font resource
// resourceLXGWMarkerGothicRegularTtf 即是 bundle.go 文件中 var 的变量名
func (m MyTheme) Font(s fyne.TextStyle) fyne.Resource {
return resourceLXGWMarkerGothicRegularTtf
}
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)
}
10.4使用主题
编辑main.go
package main
import (
"hello_go/theme"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
a.Settings().SetTheme(&theme.MyTheme{})
w := a.NewWindow("你好 世界!")
w.Resize(fyne.NewSize(240, 40))
w.SetContent(widget.NewLabel("哈喽 沃德!"))
w.ShowAndRun()
}
10.5运行
运行命令go run main.go
11、发布应用程序
11.1图片
准备一张图片,命名为icon.png
,放到项目中:.\hello_go\icon.png
11.2打包
1.运行fyne package -os windows -icon icon.png
2.exe文件图标修改效果
3.窗口左上角图标修改效果
12、对比一下发布后的程序大小
原字体文件: 2.61 MB (2,742,208 字节)
内嵌方案: 34.2 MB (35,903,711 字节)
findfont方案:31.6 MB (33,202,283 字节)
内嵌方案 | findfont方案 | |
---|---|---|
大小 | 34.2 MB (35,903,711 字节) | 31.6 MB (33,202,283 字节) |
特点 | 开箱即用,但是乱选字体有侵权风险 | 读取系统字体,但是系统都没有字体那就完了 |
字体 | 原字体文件: 2.61 MB (2,742,208 字节) | 无 |
链接
Go语言中文文档
Fyne toolkit 开发文档
Fyne Setup
fyne started
Go 技术论坛
打包字体
引用字体