[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=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" // 导入内置 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 技术论坛
打包字体
引用字体
相关文章:

[golang gui]fyne框架代码示例
1、下载GO Go语言中文网 golang安装包 - 阿里镜像站(镜像站使用方法:查找最新非rc版本的golang安装包) golang安装包 - 中科大镜像站 go二进制文件下载 - 南京大学开源镜像站 Go语言官网(Google中国) Go语言官网(Go团队) 截至目前(2023年9月17日&#x…...

2000-2018年各省能源消费和碳排放数据
2000-2018年各省能源消费和碳排放数据 1、时间:2000-2018年 2、范围:30个省市 3、指标:id、year、ENERGY、COAL、碳排放倒数*100 4、来源:能源年鉴 5、指标解释: 2018年碳排放和能源数据为插值法推算得到 碳排放…...

C# ref 学习1
ref 关键字用在四种不同的上下文中; 1.在方法签名和方法调用中,按引用将参数传递给方法。 2.在方法签名中,按引用将值返回给调用方。 3.在成员正文中,指示引用返回值是否作为调用方欲修改的引用被存储在本地,或在一般…...

MQ - 08 基础篇_消费者客户端SDK设计(下)
文章目录 导图Pre概述消费分组协调者消费分区分配策略轮询粘性自定义消费确认确认后删除数据确认后保存消费进度数据消费失败处理从服务端拉取数据失败本地业务数据处理失败提交位点信息失败总结导图 Pre...
Flutter层对于Android 13存储权限的适配问题
感觉很久没有写博客了,不对,的确是很久没有写博客了。原因我不怎么想说,玩物丧志了。后面渐渐要恢复之前的写作节奏。今天来聊聊我最近遇到的一个问题: Android 13版本对于storage权限的控制问题。 我们都知道,Andro…...

Android kotlin开源项目-功能标题目录
目录 一、BRVAH二、开源项目1、RV列表动效(标题目录)2、拖拽与侧滑(标题目录)3、数据库(标题目录)4、树形图(多级菜单)(标题目录)5、轮播图与头条(标题目录)6…...
Linux下,基于TCP与UDP协议,不同进程下单线程通信服务器
C语言实现Linux下,基于TCP与UDP协议,不同进程下单线程通信服务器 一、TCP单线程通信服务器 先运行server端,再运行client端输入"exit" 是退出 1.1 server_TCP.c **#include <my_head.h>#define PORT 6666 #define IP &qu…...
qt功能自己创作
按钮按下三秒禁用 void MainWindow::on_pushButton_5_clicked(){// 锁定界面setWidgetsEnabled(ui->centralwidget, false);// 创建一个定时器,等待3秒后解锁界面QTimer::singleShot(3000, this, []() {setWidgetsEnabled(ui->centralwidget, true);;//ui-&g…...

Linux网络编程:使用UDP和TCP协议实现网络通信
目录 一. 端口号的概念 二. 对于UDP和TCP协议的认识 三. 网络字节序 3.1 字节序的概念 3.2 网络通信中的字节序 3.3 本地地址格式和网络地址格式 四. socket编程的常用函数 4.1 sockaddr结构体 4.2 socket编程常见函数的功能和使用方法 五. UDP协议实现网络通信 5.…...

【后端速成 Vue】初识指令(上)
前言: Vue 会根据不同的指令,针对标签实现不同的功能。 在 Vue 中,指定就是带有 v- 前缀 的特殊 标签属性,比如: <div v-htmlstr> </div> 这里问题就来了,既然 Vue 会更具不同的指令&#…...

爬虫 — Scrapy-Redis
目录 一、背景1、数据库的发展历史2、NoSQL 和 SQL 数据库的比较 二、Redis1、特性2、作用3、应用场景4、用法5、安装及启动6、Redis 数据库简单使用7、Redis 常用五大数据类型7.1 Redis-String7.2 Redis-List (单值多value)7.3 Redis-Hash7.4 Redis-Set (不重复的)7.5 Redis-Z…...

tcpdump常用命令
需要安装 tcpdump wireshark ifconfig找到网卡名称 eth0, ens192... tcpdump需要root权限 网卡eth0 经过221.231.92.240:80的流量写入到http.cap tcpdump -i eth0 host 221.231.92.240 and port 80 -vvv -w http.cap ssh登录到主机查看排除ssh 22端口的报文 tcpdump -i …...

计算机网络运输层网络层补充
1 CDMA是码分多路复用技术 和CMSA不是一个东西 UPD是只确保发送 但是接收端收到之后(使用检验和校验 除了检验的部分相加 对比检验和是否相等。如果不相同就丢弃。 复用和分用是发生在上层和下层的问题。通过比如时分多路复用 频分多路复用等。TCP IP 应用层的IO多路复用。网…...

java CAS详解(深入源码剖析)
CAS是什么 CAS是compare and swap的缩写,即我们所说的比较交换。该操作的作用就是保证数据一致性、操作原子性。 cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等之前获得锁的线程释放锁之后&am…...

1786_MTALAB代码生成把通用函数生成独立文件
全部学习汇总: GitHub - GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes…...

2023/09/19 qt day3
头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QDebug> #include <QTime> #include <QTimer> #include <QPushButton> #include <QTextEdit> #include <QLineEdit> #include <QLabel> #include &l…...
Docker 学习总结(78)—— Docker Rootless 让你的容器更安全
前言 在以 root 用户身份运行 Docker 会带来一些潜在的危害和安全风险,这些风险包括: 容器逃逸:如果一个容器以 root 权限运行,并且它包含了漏洞或者被攻击者滥用,那么攻击者可能会成功逃出容器,并在宿主系统上执行恶意操作。这会导致宿主系统的安全性受到威胁。 特权升…...

如何使用ArcGIS Pro将等高线转DEM
通常情况下,我们拿到的等高线数据一般都是CAD格式,如果要制作三维地形模型,使用栅格格式的DEM数据是更好的选择,这里就为大家介绍一下如何使用ArcGIS Pro将等高线转DEM,希望能对你有所帮助。 创建TIN 在工具箱中选择“…...
【爬虫基础】万字长文详解XPath
1. 引言 XPath(XML Path Language)是一种在XML和HTML文档中查找和定位信息的强大工具。XPath的重要性在于它允许我们以简洁而灵活的方式导航和选择文档中的元素和属性。本文将深入介绍XPath的基础知识,帮助你掌握这个强大的查询语言…...

分布式多级缓存SDK设计的思考
分布式多级缓存SDK设计的思考 背景整体架构多层级组装回调埋点分区处理一致性问题缓存与数据库之间的一致性问题不同层级缓存之间的一致性问题不同微服务实例上,非共享缓存之间的一致性问题 小结 之前实习期间编写过一个简单的多级缓存SDK,后面了解到一些…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...