[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,后面了解到一些…...
设计模式:适配器模式(C++实现)
适配器模式(Adapter Pattern)是一种结构设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式通常用于连接两个不兼容的接口或类,使它们能够一起工作。 以下是一个简单的C适配器模式的示例: #in…...
【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 定义激活函数 logistic(z) tanh(z) relu(z) leaky_relu(z, gamma0.1) 2. 定义输入、权重、偏置 3. 计算净活性值 4. 绘制激活函数的图像 5. 应用激活函数并…...
容器技术所涉及Linux内核关键技术
一、容器技术前世今生 1.1 1979年 — chroot 容器技术的概念可以追溯到1979年的UNIX chroot。 它是一套“UNIX操作系统”系统,旨在将其root目录及其它子目录变更至文件系统内的新位置,且只接受特定进程的访问。 这项功能的设计目的在于为每个进程提供…...
IPV4和IPV6,公网IP和私有IP有什么区别?
文章目录 1、什么是IP地址?1.1、背景1.2、交换机1.3、局域网1.4、广域网1.5、ISP 互联网服务提供商 2、IPV42.1、什么是IPV4?2.2、IPV4的组成2.3、NAT 网络地址转换2.4、端口映射 3、公网IP和私有IP4、IPV6 1、什么是IP地址? 1.1、背景 一台…...
高云FPGA系列教程(7):ARM GPIO外部中断
文章目录 [toc]GPIO中断简介FPGA配置常用函数MCU程序设计工程下载 本文是高云FPGA系列教程的第7篇文章。 本篇文章介绍片上ARM Cortex-M3硬核处理器GPIO外部的使用,演示按键中断方式来控制LED亮灭,基于TangNano 4K开发板。 参考文档:Gowin_E…...
Python爬虫:动态获取页面
动态网站根据用户的某些操作产生一些结果。例如,当网页仅在向下滚动或将鼠标移动到屏幕上时才完全加载时,这背后一定有一些动态编程。当您将鼠标指针悬停在某些文本上时,它会为您提供一些选项,它还包含一些动态.这是是一篇关于动态…...
大数据平台迁移后yarn连接zookeeper 异常分析
大数据平台迁移后yarn连接zookeeper 异常分析 XX保险HDP大数据平台机房迁移异常分析。 异常现象: 机房迁移后大部分组件都能正常启动Yarn 启动后8088 8042等端口无法访问Hive spark 作业提交到yarn会出现卡死。 【备注】虽然迁移,但IP不变。 1. Yarn连…...
Ubuntu Nginx 配置 SSL 证书
首先需要在 Ubuntu 中安装 Nginx 服务, 打开终端执行以下命令: $ sudo apt update $ sudo apt install nginx -y然后启动 Nginx 服务并设置为开机时自动启动, 执行以下命令: $ sudo systemctl start nginx $ sudo systemctl enable nginx最后再验证一下 Nginx 服务的当前状态…...
将本地前端工程中的npm依赖上传到Nexus
【问题背景】 用Nexus搭建了内网的依赖仓库,需要将前端工程中node_modules中的依赖上传到Nexus上,但是node_modules中的依赖已经是解压后的状态,如果直接机械地将其简单地打包上传到Nexus,那么无法通过npm install下载使用。故有…...
软考高级架构师下篇-16通信系统架构设计理论与实践
目录 1. 引言2. 通信系统网络架构3. 网络构建关键技术4. 网络构建5. 前文回顾1. 引言 此章节主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本节知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中…...
seo公司 上海/南京网站seo
展开全部电脑没有音响是不能放2113出声音的5261,需要连接声音输出设备才可以播放声音。电脑中只有4102声卡,也叫1653音频卡(港台称之为声效卡),是计算机多媒体系统中最基本的组成部分,是实现声波/数字信号相互转换的一种硬件。声卡…...
做网站开发要具备哪些素质/百度seo建议
eclipse的git插件安装与配置1 git插件安装2 git插件卸载3 配置git插件 从git云端下载项目到本地修改并提交自己的代码到云端1 把修改好的文件上传到本地仓库2 pull一下3 提交代码到云端31 简易方法直接上传到master分支32 或者上传分支 小技巧1 如何恢复未提交的修改文件2 查看…...
自己制作一个网站需要多少钱/营销和销售的区别在哪里
常用命令 自动补全返回值 Eclipse对应Ctrl2 L,Idea对应CtrlAlt V,为了方便我改成CtrlL CtrlF9 手动编译 只是修改方法内的代码,不需要重启应用,只需要ctrlf9手动编译一下即可生效 CtrlAltL 一键格式化代码Ctrl F12 显示当前…...
做网站会犯法吗/推广方法
计算机测色配色中的操作误差分析维普资讯实 验 技 术 与 管 理 V0l20 N02 2003 57计算机测色配色中的操作误差分析周秋宝 ,方红英(1.浙江工程学院材纺学院,杭州 310033;2.杭州第六人民医院)摘 要:本文针对d…...
app开发公司 弙东/谷歌seo课程
软文推广比传统推广更加容易让大众接受,因为其“含蓄”的软文营销植入广告营销被作为整合营销传播的一个重要支点。软文推广也有自己的特点和禁区,不是随随便便就能拿捏准确,只有明白了软文营销的特殊性才能玩儿得转。 1、不了解软文推广相关…...
网站系统建设管理制度/网站搭建步骤
1. JS为什么是单线程的? JS最初被设计用在浏览器中,那么想象一下,如果浏览器中的JS是多线程的。 那么现在有2个进程,process1 process2,由于是多进程的JS,所以他们对同一个dom,同时进行操作。 p…...