• [golang gui]fyne框架代码示例


    -1、注意

    1.fyne不支持修改窗口位置。相关链接:https://github.com/fyne-io/fyne/compare/master…lukx33:fyne:positionhttps://github.com/lukx33/fyne/tree/positionhttps://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=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文件格式的知识,不然设置无效)

        "[go]": {
            "editor.codeActionsOnSave": {
                "source.organizeImports": false
            }
        },
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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!
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    请添加图片描述
    请添加图片描述
    快捷键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()
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    编辑完有很多报错
    在这里插入图片描述
    运行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()
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    编辑完可能会有警告,运行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()
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行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)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    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()
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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




    请添加图片描述

  • 相关阅读:
    layui增删改查
    Llama3 中文通用 Agent 微调模型来啦!(附手把手微调实战教程)
    Shell编程之免交互
    Flutter图标
    教程图文详解 - 数据通信基础(第二章)
    Altium Designer 相同模块的布局布线复用-AD
    Py之tiktoken:tiktoken的简介、安装、使用方法之详细攻略
    熟悉又陌生的package.json
    小米发布CyberOn仿生机器人;多伦多大学『3D和几何深度学习』课程资料;英伟达神经场工具库;商汤开源项目集锦;前沿论文 | ShowMeAI资讯日报
    多线程的创建、线程的状态和调度and同步、join和yield以及单例设计模式的种类
  • 原文地址:https://blog.csdn.net/qq_39124701/article/details/132940216