Go Fyne:一种现代的,跨平台的 GUI 开发工具集
Fyne 是一个用 Go 语言写的,提供丰富,现代化的用户界面(UI)的开发工具集。Fyne 提供了一种简单而直观的方式来构建应用程序,并且注意到它是跨平台的,可以在 Windows,macOS,Linux,Android 和 iOS 上运行。
1. Fyne 的核心特性
简单性:Fyne 的 API 使用简单明了,让开发者可以轻松创建出富有吸引力的 UI。它摒弃了过时的复杂系统,而是采用了现代化的,基于对象的方法。
跨平台:Fyne 是真正的跨平台工具集,可以无缝地在所有主流的桌面和移动操作系统上运行。这意味着你只需要编写一次代码,就可以在多个平台上运行你的应用程序。
丰富的组件库:Fyne 提供了一套丰富的预定义组件,包括但不限于按钮,复选框,文本框,列表,菜单,以及滑块等。这些组件都可以方便地进行定制和扩展。
响应式设计:Fyne 支持自动布局和响应式设计,这样你的应用程序可以在各种屏幕尺寸和分辨率上都能看起来很好。
主题和样式:Fyne 提供了一套主题系统,允许你方便地更改应用程序的外观。你可以选择 Fyne 的预定义主题,或者创建自己的主题。
2. Fyne 的安装和使用
首先,你需要在你的系统上安装 Go。然后,你可以使用 go get 命令来安装 Fyne:
Copy
go get fyne.io/fyne/v2
安装成功后,你就可以开始使用 Fyne 来创建你的应用程序了。下面是一个简单的 Fyne 程序示例:
go
Copy
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Hello")
hello := widget.NewLabel("Hello Fyne!")
w.SetContent(container.NewVBox(hello, widget.NewButton("Quit", func() {
a.Quit()
})))
w.ShowAndRun()
}
这个程序创建了一个包含一个标签和一个按钮的窗口。点击按钮后,应用程序将退出。
3. Fyne 的组件
Fyne 提供了一系列的 UI 组件,你可以使用它们来构建你的应用程序。这些组件包括:
窗口(Windows):窗口是所有 Fyne 应用程序的基础。你可以在窗口中添加各种组件,如按钮,标签,列表等。
布局(Layouts):布局是用来组织和定位你的组件的。Fyne 提供了多种布局,如网格布局,垂直和水平盒子布局等。
小部件(Widgets):小部件是 Fyne 的基础组件,例如按钮,标签,文本框,列表等。你可以使用这些小部件来构建你的 UI。
菜单(Menus):Fyne 提供了菜单组件,你可以使用它来创建上下文菜单,或者应用程序的主菜单。
对话框(Dialogs):对话框可以用来显示消息,警告,错误,或者获取用户的输入。
4. Fyne 的布局和自动布局
Fyne 提供了多种布局策略,你可以使用它们来定位你的组件。以下是一些主要的布局类型:
Box Layout:Box 布局可以以垂直或水平方式排列组件。你可以使用容器的 NewVBox 或 NewHBox 函数来创建一个 Box 布局。
Grid Layout:Grid 布局将组件排列成一个网格。你可以使用容器的 NewGrid 函数来创建一个 Grid 布局。
Border Layout:Border 布局将组件放置在窗口的上,下,左,右或中间。你可以使用容器的 NewBorder 函数来创建一个 Border 布局。
5. Fyne 的主题和样式
Fyne 提供了一套主题系统,允许你方便地更改应用程序的外观。你可以选择 Fyne 的预定义主题,或者创建自己的主题。
Fyne 有两种预定义主题:Light 主题和 Dark 主题。你也可以创建自己的主题,只需要实现 theme.Theme 接口就可以了。
6. Fyne 的事件处理
Fyne 提供了一套事件处理系统,允许你在用户与应用程序交互时执行特定的操作。例如,你可以处理按钮的点击事件,文本框的输入事件等。
事件处理通常通过回调函数来实现。例如,你可以给一个按钮添加一个点击事件处理器:
go
Copy
button := widget.NewButton("Click me", func() {
fmt.Println("Button clicked!")
})
7. Fyne 的动画和图形
Fyne 提供了一套强大的动画和图形系统。你可以使用它来创建复杂的动画,或者自定义的图形。
例如,你可以使用 Fyne 的 canvas 包来创建自定义的图形:
go
Copy
rect := canvas.NewRectangle(color.RGBA{R: 0x80, G: 0, B: 0, A: 0xff})
你也可以使用 animation 包来创建动画:
go
Copy
anim := animation.NewAnimation(func(progress float32) {
rect.Move(fyne.NewPos(10+(progress*90), 10))
}, time.Second)
结论
Fyne 是一个现代的,简单易用的 Go GUI 库。它提供了丰富的组件库,强大的布局系统,灵活的主题和样式,以及强大的事件处理和动画系统。无论你是第一次尝试 GUI 编程,还是已经是一位经验丰富的开发者,Fyne 都是一个值得一试的工具。
相关文章:
Go Fyne:一种现代的,跨平台的 GUI 开发工具集
Fyne 是一个用 Go 语言写的,提供丰富,现代化的用户界面(UI)的开发工具集。Fyne 提供了一种简单而直观的方式来构建应用程序,并且注意到它是跨平台的,可以在 Windows,macOS,Linux&…...
React Dva 操作models中的subscriptions讲述监听
接下来 我们来看一个models的属性 之前没有讲到的subscriptions 我们可以在自己有引入的任意一个models文件中这样写 subscriptions: {setup({ dispatch, history }) {console.log(dispatch);}, },这样 一进来 这个位置就会触发 这里 我们可以写多个 subscriptions: {setup…...
标准化归一化 batch norm, layer norm, group norm, instance norm
Layer Normalization - EXPLAINED (in Transformer Neural Networks) Layer Normalization - EXPLAINED (in Transformer Neural Networks) 0~4min:什么是multi-head attention 5~7min:layer norm图示 7~9min:公式举例layer norm 9:54-end:layer norm的代码示例 group n…...
Zabbix监控系统详解及配置
前言 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。利用一个优秀的监控软件,我们可以: 通过一个友好的界面进行浏览整个网站所有的服务…...
【100天精通python】Day29:文件与IO操作_XML文件处理
目录 专栏导读 一、XML文件概述 1. 标签和元素 2. 嵌套结构 3. 属性 4. 命名空间 5. CDATA节 6. 注释 7. 验证与验证语言 8. 扩展性 二、XML文件处理常见操作 1. 解析XML文件 2. 创建和编辑XML文件 3. 修改XML文件 4. 查询XML元素 5 遍历XML元素 6. 删除XML元…...
人工智能的未来:探索下一代生成模型
推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 生成式 AI 目前能够做什么,以及探索下一波生成式 AI 模型需要克服的当前挑战? 如果你跟上科技世界的步伐,你就会知道生成式人工智能是最热门的话题。我们听到了很多关于…...
C++ 运算符重载为非成员函数
运算符也可与重载为非成员函数。这时运算所需要的操作数都需要通过函数的形参表来传递,在形参表中形参从左到右的顺序就是运算符操作数的顺序。如果需要访问运算符参数对象的私有成员,可以将该函数声明为友元函数。 【提示】不用机械地将重载运算符的非…...
[国产MCU]-BL602开发实例-定时器
定时器 文章目录 定时器1、BL602定时器介绍2、定时器驱动API介绍3、定时器使用实例3.1 单次计时3.2 持续计时通用定时器,用于定时,当时间到达我们所设置的定时时间会产生定时中断,可以用来完成定时任务。本文将详细介绍如何使用BL602的定时器功能。 1、BL602定时器介绍 BL6…...
re学习(29)攻防世界-CatFly(复原反汇编)
因为这是一个.dll文件,在Linux上运行一下: 找到主要函数:(以及由上面三部分对应的代码部分) __int64 __fastcall main(int a1, char **a2, char **a3) {size_t v3; // rbx__int16 v5[4]; // [rsp10h] [rbp-4B0h] B…...
Android WIFI-概率性不能自连
1.连上wifi时同步保存wifi密码,避免连上wifi后马上断电重启由于密码没保存导致不能自动重连wifi packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java @@ -66,6 +66,7 @@ import com.android.server.wifi.WifiNative.SupplicantDeathEve…...
用Python批量复制文件,方法有9种,方便快捷
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 当我们复制一个文件时用复制粘贴就可以了,如果是多个文件呢? 就会很麻烦了! 今天给大家介绍一下用Python批量复制文件,方法有九种!希望对你有帮助 1. Shutil Copy…...
《凤凰架构》第一章——服务架构演进史
前言 刚开始决定弄懂文中所提到的所有东西,就像我写ByteByteGo呢几篇文章一样,把每一句话都弄懂。但是对于《凤凰架构》来说,这有点太费时间了,并且没有必要,有些东西可能永远都不会用到,但文章为了全面的…...
【iPhone】手机还有容量,拍视频却提示 iPhone 储存空间已满
文章目录 前言解决方案 结语 前言 今天在用 iPhone 录像的时候突然提醒我 iPhone储存空间已满 你没有足够的储存空间来录制视频” 可我明明还有 20G 的容量 我非常疑惑,因为我之前还剩1个G都能录像,现在20G反而不行了,于是重启了手机&#…...
pycharm中opencv库导入 cv2. 无函数提示跳出解决方法
pycharm中opencv库导入 cv2. 无函数提示跳出解决方法 1、找到当前解释器安装目录 例如: 2、进入D:\Python37\Lib\site-packages\cv2文件,进入cv2文件夹: 找到cv2.pyd, 把cv2.pyd复制一份,放到上层文件夹下,即site-p…...
week3
题解: 前序遍历性质: 节点按照 [ 根节点 | 左子树 | 右子树 ] 排序。 中序遍历性质: 节点按照 [ 左子树 | 根节点 | 右子树 ] 排序。 通过以上三步,可确定 三个节点 :1.树的根节点、2.左子树根节点、3.右子树根节点。 之后进行…...
LeetCode28.找出字符串中第一个匹配项的下标
28.找出字符串中第一个匹配项的下标 目录 28.找出字符串中第一个匹配项的下标题目描述解法一:朴素的模式匹配解法二:KMP算法KMP解决的问题类型最长公共前后缀KMP算法过程next数组的构建代码实现 题目描述 给你两个字符串haystack和needle,请…...
爬虫009_字符串高级_替换_去空格_分割_取长度_统计字符_间隔插入---python工作笔记028
然后再来看字符串的高级操作 取长度 查找字符串下标位置 判断是否以某个字符,开头结尾 计算字符出现次数 替换...
Windows 安装Tensorflow2.1、Pycharm开发环境
文章目录 1、安装anaconda2、安装Tensoflow2.1、创建虚拟环境2.2、安装Tensorflow依赖2.3、验证Tensorflow是否成功 3、配置pycharm环境4、错误记录 1、安装anaconda https://www.anaconda.com/download 打开命令行工具,出现base就表示安装成功了,表示当…...
【javaScript】数组的常用方法(自用记忆版)
目录 一、操作方法 增 push() unshift() splice() concat() 删 pop() shift() splice() slice() 改 splice() 查 indexOf() includes() find() 二、排序方法 reverse() sort() 三、转换方法 join() 四、迭代方法 some() every() forEach…...
全新二开美化版UI好看的社区源码下载/反编译版
2023全新二开美化版UI精美的社区源码下载/反编译版 之前我分享过Rule原版,相信大家已经有很多人搭建好了。这次我要分享的是RuleAPP的二开美化版(请尊重每个作者的版权),这个版本没有加密,可以进行反编译,…...
终极英雄联盟换肤工具:R3nzSkin国服特供版完整使用教程
终极英雄联盟换肤工具:R3nzSkin国服特供版完整使用教程 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 想要在英雄联盟国服免费体验所有皮肤…...
SyncedStore深度解析:揭秘CRDT技术如何实现无冲突数据同步
SyncedStore深度解析:揭秘CRDT技术如何实现无冲突数据同步 【免费下载链接】SyncedStore SyncedStore CRDT is an easy-to-use library for building live, collaborative applications that sync automatically. 项目地址: https://gitcode.com/gh_mirrors/sy/Sy…...
Arm Neoverse CMN-650一致性网格网络架构与配置解析
1. Arm Neoverse CMN-650 一致性网格网络架构解析在现代多核处理器设计中,一致性网格网络(Coherent Mesh Network)已成为解决核心间通信瓶颈的关键技术。Arm Neoverse CMN-650作为第二代一致性互连解决方案,其架构设计体现了三个核…...
观察Taotoken用量看板如何帮助团队控制API成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助团队控制API成本 作为团队的技术负责人,引入大模型API后,成本的可观测性与可…...
ElevenLabs泰米尔文语音API调用性能突降?紧急修复方案:更换Region为ap-southeast-1后P95延迟从2.4s降至380ms(附curl压测脚本)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs泰米尔文语音API性能突降事件全貌 2024年9月中旬起,多位集成ElevenLabs泰米尔文(ta-IN)语音合成服务的开发者报告异常延迟与高失败率——典型请求响应时间…...
Harness Open Source 与 GitLab 的区别:一个轻量一体化 DevOps 平台,一个完整 DevSecOps 平台
Harness:https://github.com/harness/harness 一、先给结论 Harness Open Source 和 GitLab 都可以做代码托管、代码协作、CI/CD 和制品管理,但二者的产品边界不同。 Harness Open Source 官方定位是一个开源的一体化开发平台,集成源码管理、CI/CD pipelines、托管开发环…...
OpenWrt嵌入式Linux开发入门:从编译到部署的完整实践指南
1. 项目概述:为什么选择OpenWrt作为嵌入式开发的起点 如果你对Linux系统有一定了解,并且想踏入嵌入式开发的大门,或者你是一个网络爱好者,想让家里的路由器“脱胎换骨”,那么OpenWrt绝对是一个绕不开的名字。它不是一…...
终极Citra 3DS模拟器完整指南:在电脑上免费畅玩任天堂3DS游戏
终极Citra 3DS模拟器完整指南:在电脑上免费畅玩任天堂3DS游戏 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 想要在电脑上重温《精灵宝可梦》系列、《塞尔达传说》等经典3DS游戏吗?Ci…...
从需求到建表:我是如何用一张ER图搞定客户复杂业务逻辑的
从需求到建表:我是如何用一张ER图搞定客户复杂业务逻辑的 接手电商系统重构项目的第一天,客户甩过来二十多页需求文档和五张不同版本的Excel表。"这些数据都要关联起来",产品经理指着密密麻麻的字段说,"但具体怎么…...
终极实战指南:用MifareOneTool解决Windows平台MIFARE Classic卡操作难题
终极实战指南:用MifareOneTool解决Windows平台MIFARE Classic卡操作难题 【免费下载链接】MifareOneTool A GUI Mifare Classic tool on Windows(停工/最新版v1.7.0) 项目地址: https://gitcode.com/gh_mirrors/mi/MifareOneTool 想象…...
