[golang gui]fyne框架代码示例

1、下载GO

Go语言中文网
golang安装包 - 阿里镜像站(镜像站使用方法:查找最新非rc版本的g<>olang安装包)
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=onGOPROXY=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文件格式的知识,不然设置无效)

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)

go 复制代码
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编辑

go 复制代码
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

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

最终结果如下

go 复制代码
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

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

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 技术论坛
打包字体
引用字体
<>
<>
<>
<>

相关推荐
Ajiang28247353042 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空2 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10225 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----7 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024067 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it7 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康8 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
qq_17448285758 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
转世成为计算机大神8 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式