[golang gui]fyne框架代码示例

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}},

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" // 导入内置 fmtfunc 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 mainimport ("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 mainimport ("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.ttfif 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 mainimport ("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 themeimport ("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 mainimport ("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 技术论坛
打包字体
引用字体




请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试题库(一):数据结构和算法

链表 链表,常见的面试题有写一个链表中删除一个节点的算法、单链表倒转、两个链表找相交的部分,这个一般必须得完全无误的情况下写出来;给出两个链表的头结点,找出这两个链表的交点。java 中数组和链表的区别,各自优势 如何设计拥有高效的随机读取能力的的链表(跳表) 设…

【字符串】后缀数组

参考文章&#xff1a; 数据结构 —— 字符串&#xff1a;后缀数组_Jetiaime的博客-CSDN博客&#xff08;算法代码&#xff09; 后缀数组_KonjakLAF的博客-CSDN博客&#xff08;应用例题&#xff09; 板子&#xff1a; #include<bits/stdc.h> using namespace std; ty…

【数据分享】2005-2022年全国民航机场客货吞吐量和起降架次数据

机场是一个城市对外联系的重要渠道&#xff0c;机场的旅客吞吐量和货物吞吐量是体现一个城市对外联系程度的重要指标。 本次我们给大家分享的是2005-2022年我国民航机场的旅客吞吐量、货邮吞吐量、起降架次数据。数据格式为Excel和Shp两种格式。数据坐标为WGS1984。原始数据来…

MySQL常考知识点

MySQL常考知识点 索引的基本原理索引设计的原则事务的基本特性和隔离级别什么是MVCC简述MyISAM和InnoDB的区别Explain语句结果中各个字段分表表示什么索引覆盖是什么最左前缀原则是什么B树和B树的区别&#xff0c;为什么Mysql使⽤B树Mysql锁有哪些&#xff0c;如何理解Mysql慢查…

腾讯面试题:无网络环境,如何部署Docker镜像?

亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;很高兴再次和大家见面。今天&#xff0c;我要和大家聊聊一个特别有趣的话题——腾讯面试题&#xff1a;无网络环境&#xff0c;如何部署Docker镜像&#xff1f;这可是一个技术含量颇高的问题哦&#xff01;废…

nodejs 如何在npm发布自己的包 <记录>

一、包结构 必要结构&#xff1a; 一个包对应一个文件夹&#xff08;文件夹名不是包名&#xff0c;但最好与包名保持一致&#xff0c;包名以package.json中的name为主&#xff09;包的入口文件index.js包的配置文件package.json包的说明文档README.md 二、需要说明的文件 1.配…

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

目录 前言 一、卷积神经网络概述 二、卷积神经网络特点 卷积运算 单通道&#xff0c;二维卷积运算示例 单通道&#xff0c;二维&#xff0c;带偏置的卷积示例 带填充的单通道&#xff0c;二维卷积运算示例 Valid卷积 Same卷积 多通道卷积计算 1.局部感知域 2.参数共…

软件测试的理论基础1

软件的生命周期 可行性研究和计划&#xff08;立项&#xff09; 需求分析 概要设计&#xff08;测试计划&#xff09; 详细设计&#xff08;测试方案&#xff09; 实现&#xff08;开发阶段&#xff1b;包含单元测试&#xff09; 组装测试&#xff08;集成测试&#xff09; 确…

【MT7628AN】IOT | MT7628AN OpenWRT开发与学习

IOT | MT7628AN OpenWRT开发与学习 时间:2023-06-21 文章目录 `IOT` | `MT7628AN` `OpenWRT`[开发与学习](https://blog.csdn.net/I_feige/article/details/132911634?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132911634…

空间(蓝桥杯)

空间 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝准备用 256MB 的内存空间开一个数组&#xff0c;数组的每个元素都是 32 位 二进制整数&#xff0c;如果不考虑程序占用的空间和维护内存需要的辅助空间&#xff0c;…

上PICO,沉浸式观看亚运直播,参与跨国界游戏竞技

备受瞩目的杭州第19届亚运会&#xff0c;将于9月23日正式开幕。据悉&#xff0c;这也是有史以来项目最多的一届亚运会&#xff0c;除部分传统奥运项目外&#xff0c;还包含武术、藤球、板球、克柔术、柔术等亚洲特色项目&#xff0c;以及霹雳舞、电子竞技等深受年轻人喜爱的新兴…

完成flex布局与float布局

当涉及到布局时&#xff0c;Flex布局和Float布局是两种不同的方法&#xff0c;它们分别用于实现不同的布局需求。下面我将为你展示如何使用这两种方法来完成布局。 1. 使用Flex布局&#xff1a; Flex布局是一种强大的布局方法&#xff0c;特别适用于创建响应式和灵活的布局。…

Mojo编程语言是AI人工智能的新的编程语言

Mojo是Chris Lattner的创业公司Modular开发的一种新的编程语言&#xff0c;旨在统一AI基建和异构计算。Mojo被认为是Python的超集&#xff0c;兼容Python生态&#xff0c;但添加了系统编程和编译期优化的特性&#xff0c;以提高性能和部署效率。Mojo基于MLIR&#xff0c;可以支…

debian终端快捷键设置

为了方便使用图形化debian&#xff0c;快捷调出shell终端是提升工作学习效率的最重要的一步。 1.首先点击右上角&#xff0c;选择设置 2.点击键盘&#xff0c;选择快捷键&#xff0c;并创建自定义快捷键 3.点击添加快捷键 4.根据图中提示创建快捷键 Name: Terminal Command…

promise回顾和总结(温故知新)

文章目录 promise回顾和总结&#xff08;温故知新&#xff09;1.promise语法 promise回顾和总结&#xff08;温故知新&#xff09; 参考: https://juejin.cn/post/6844903604009041928 1.promise语法 Promise编程的核心思想是如果数据就绪(promised)&#xff0c;那么(then)做点…

Android Jetpack Compose之UI的重组和自动刷新

1.概述 我们都知道&#xff0c;在传统的View中&#xff0c;若要改变UI&#xff0c;需要我们修改View的私有属性&#xff0c;比如要修改一个TextView的文字&#xff0c;我们需要通过它的setText(“xxx”)方法去修改。而Compose 则是通过重组来刷新UI。在之前的状态管理的文章中…

MyBatis的动态 SQL、代理机制与多级缓存

MyBatis的动态 SQL、代理机制与多级缓存 前言一、动态 SQL二、代理机制三、多级缓存最后 前言 MyBatis 是一个开源的 Java 持久层框架&#xff0c;它通过 XML 或注解的方式将 SQL 语句与 Java 对象进行映射。相比于传统的 JDBC 操作数据库&#xff0c;MyBatis 简化了很多重复的…

uni-app获取地理位置

在uni-app中&#xff0c;可以通过uni.getLocation()方法获取地理位置。具体步骤如下&#xff1a; 在uni-app项目中的manifest.json文件中&#xff0c;添加需要获取地理位置的权限&#xff1a; {"mp-weixin": {"appid": "...","permission…

【CSS】画个三角形或圆形或环

首先通过调整边框&#xff0c;我们可以发现一些端倪 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style>.box{width: 150px;height:150px;border: 50px solid black;}</style&g…

[JAVEee]SpringBoot项目的创建

SpringBoot可以更好的开发Spring项目,本文章将使用idea社区版来演示创建项目的过程与注意事项. SpringBoot的优点 SpringBoot中内置快速添加依赖的功能,能够便捷的集成各种框架,帮助开发.内置运行容器,无需配置Tomcat容器等其他web容器,可直接进行项目的部署与运行.更好的使用…