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

相关推荐
红尘散仙3 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记4 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
isyangli_blog4 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008114 小时前
FastAPI APIRouter
开发语言·python
Benszen4 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆5 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木5 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
喵个咪5 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
杨充5 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~5 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言