使用 Fyne 构建 GUI 应用:设置标签文本和自增计数器

引言

Fyne 是一个用 Go 语言编写的跨平台 GUI 框架,它提供了一套丰富的组件来帮助开发者快速构建出漂亮的用户界面。在本文中,我们将通过一个简单的案例来演示如何使用 Fyne 创建 GUI 应用程序,该程序包含设置标签文本和自增计数器的功能。

功能描述

本案例的应用程序将包含以下功能:

  • 一个文本标签 (Label),用于显示消息。
  • 一个文本输入框 (Entry),允许用户输入文本。
  • 一个按钮 (Button),当点击时,将输入框中的文本设置到标签上。
  • 一个显示计数的标签 (Label),显示当前的计数值。
  • 一个计数增加按钮 (Button),每次点击都会使计数加一,并更新显示的计数。
    在这里插入图片描述

完整代码实现

以下是使用 Fyne 编写的完整应用程序代码:

package mainimport ("fmt""fyne.io/fyne/v2""fyne.io/fyne/v2/app""fyne.io/fyne/v2/container""fyne.io/fyne/v2/theme""fyne.io/fyne/v2/widget""image/color""log""os"
)// App 定义了应用程序的 UI 组件。
type App struct {Output       *widget.LabelEntry        *widget.EntryButton       *widget.ButtonCount        *widget.LabelIncrementBtn *widget.Button
}// myTheme 定义了应用程序的自定义主题。
type myTheme struct {font fyne.Resource
}// main 是程序的入口点,设置应用程序和 UI。
func main() {// 创建应用程序实例。appInstance := &App{}appInstance.setupUI()// 创建 Fyne 应用程序。myApp := app.New()// 加载自定义字体。customFont := fyne.NewStaticResource("NotoSansHans.ttf", loadFont("NotoSansHans-Regular.ttf"))myApp.Settings().SetTheme(&myTheme{font: customFont})// 创建窗口并设置内容。window := myApp.NewWindow("Fyne GUI Example")window.SetContent(container.NewVBox(appInstance.Output,appInstance.Entry,appInstance.Button,appInstance.Count,appInstance.IncrementBtn,))window.Resize(fyne.NewSize(300, 200))window.ShowAndRun()
}// setupUI 初始化应用程序的 UI 组件。
func (app *App) setupUI() {// 初始化 UI 组件。app.Output = widget.NewLabel("Hello, Fyne!")app.Entry = widget.NewEntry()app.Button = widget.NewButton("Update Text", func() {app.Output.SetText(app.Entry.Text)})app.Button.Importance = widget.HighImportance// 初始化计数器和相关按钮。count := 0app.Count = widget.NewLabel(fmt.Sprintf("Current Count: %d", count))app.IncrementBtn = widget.NewButton("Increment", func() {count++app.Count.SetText(fmt.Sprintf("Current Count: %d", count))})app.IncrementBtn.Importance = widget.DangerImportance
}// loadFont 加载字体文件为字节。
func loadFont(fontPath string) []byte {fontData, err := os.ReadFile(fontPath)if err != nil {log.Fatalf("Failed to load font file: %v", err)}return fontData
}// 实现 myTheme 方法。
func (m *myTheme) Font(s fyne.TextStyle) fyne.Resource {return m.font
}
func (m *myTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {return theme.DefaultTheme().Color(n, v)
}
func (m *myTheme) Icon(n fyne.ThemeIconName) fyne.Resource {return theme.DefaultTheme().Icon(n)
}
func (m *myTheme) Size(n fyne.ThemeSizeName) float32 {return theme.DefaultTheme().Size(n)
}

代码解析

  1. App 结构体:包含了所有 UI 组件的字段。
  2. myTheme 结构体:用于自定义应用程序的主题,可以扩展以包含颜色、图标和尺寸的自定义。
  3. main 函数:程序的入口点,创建 App 实例,设置 UI,并启动 Fyne 应用程序。
  4. setupUI 方法:初始化并设置 UI 组件,包括文本标签、输入框、按钮和计数器。
  5. loadFont 函数:加载自定义字体文件。

结语

通过上述代码,我们展示了如何使用 Fyne 构建一个包含基本交互功能的 GUI 应用程序。Fyne 的组件和方法都非常简单直观,使得构建跨平台桌面应用变得容易。你可以使用本文中的代码作为起点,进一步扩展功能,发挥 Fyne 的强大功能来构建更复杂的应用程序。

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

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

相关文章

高可用集群keepalived从部署到实战一篇解决

目录 一.高可用集群 1.1 集群类型 1.2 系统可用性 1.3 系统故障 1.4 实现高可用 1.5.VRRP: 1.5.1 VRRP 相关术语 1.5.2 VRRP 相关技术 二.Keepalived 部署 2.1 keepalived 简介 2.2keepalived架构 2.3 Keepalived 环境准备 2.4 Keepalived 相关文件 2.…

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】 介绍基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码-能管系统软件架构

【记git 重命名文件失败,和正确方法】

【背景】 想要重命名一个文件,并同步到远程 【过程】 1.我是直接把 “驱动增加he.c” 文件重命名为 “驱动增加播放he接口方法” ,想着直接提交就会同步重命名git仓记录的文件名。然后就可以推送到远程仓库,同步重命名远程仓库的文件名。 2.然…

全球滑坡(降雨诱发的)数据(有时间属性)

滑坡一般指狭义概念的滑坡,是指构成斜坡的有滑动历史和滑动可能性的岩、土体边坡,在重力作用下伴随着其下部软弱面(带)上的剪切作用过程而产生整体性运动的现象。 滑坡的发育阶段滑坡的发生、发展过程是有阶段性的。根据大量的现场实际资料、观测成果、滑坡模型试验和相关的岩土…

ant design pro v6 如何做好角色管理

先上图: 整个角色管理是如何做的吗? 首先你要处理后端,要先把角色存到用户那。 这是用户管理部分的内容: 可以看到一个用户是有多个角色的。 看到没有,存的是数组 数组的是一个 role 对象 role 对象是这样&#xf…

【专题】2024年7月人工智能AI行业报告合集汇总PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37350 随着人工智能技术的飞速发展,AI已经成为当今时代的重要驱动力。本报告将聚焦于人工智能AI行业的最新动态,涵盖客户服务、体验营销、资产管理以及国产AI大模型应用等多个领域。通过深入研究和分析,我们…

C++ 设计模式——抽象工厂模式

抽象工厂模式 抽象工厂模式 抽象工厂模式主要组成部分代码实现抽象工厂模式模式的 UML 图抽象工厂模式 UML 图解析优点和缺点适用场景 抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。它通常用于需要创建多个产品…

2024年必读!《大模型应用开发极简入门》—— 一书掌握LLM大模型精髓

大家好,今天给大家推荐一本大模型应用开发入门书籍《大模型应用开发极简入门》,本书对很多AI概念做了讲解和说明! 朋友们如果有需要 《大模型应用开发极简入门》,扫码获取~ 本书主要讲解了以下几个方面的大模型技术: …

[图解]片段16 ESS状态机图-SysMLEA建模住宅安全系统

1 00:00:00,220 --> 00:00:03,580 然后我们看初始这里 2 00:00:03,590 --> 00:00:09,500 有一个指向它的一个迁移的事件 3 00:00:09,710 --> 00:00:13,730 站点可用,这个实际上是错误的 4 00:00:14,020 --> 00:00:15,050 这不是事件 5 00:00:15,900…

NCSN公式推导(一)

通过估计数据分布的梯度进行生成建模 Paper Title:Generative Modeling by Estimating Gradients of the Data Distribution Paper是斯坦福大学发表在NIPS 2019的工作 Paper地址 Abstract 我们引入了一种新的生成模型,其中样本通过朗之万动力学生成&…

Power Query抓取多页数据导入到Excel

原文链接 举例网站:http://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml?last5&p1 操作步骤 (版本为:Excel2010): Step-01:单击【Power Query】-【从Web】,…

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有: 1.日期类的构造函数 2.日期类的拷贝构造函数(在头文件中实现) 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…

【Linux】 gdb-调试器初入门(简单版使用)

🔥系列文章:《Linux入门》 目录 一、背景 二、什么是GDB 🌷定义 🌷GDB调试工具---提供的帮助 三、GDB的安装教程-Ubuntu 🌷gdb的安装 四、哪类程序可被调试 🌷程序的发布方式 🌷Debug版…

Vscode——如何实现 Ctrl+鼠标左键 跳转函数内部的方法

一、对于Python代码 安装python插件即可实现 二、对于C/C代码 安装C/C插件即可实现

5.3 表结构设计与数据完整性

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

Linux:开发工具(2)

一、Linux编译器-gcc/g使用 1.1 为什么我们可以用C/C做开发呢? 无论是在windows、还是Linux中,C的开发环境不仅仅指的是vs、gcc、g,更重要的是语言本身的头文件(函数的声明)和库文件(函数的实现&#xff0…

Cesium 实战 - 自定义纹理材质系列之 - 半球雷达效果(力场闪烁)

Cesium 实战 - 自定义纹理材质系列之 - 半球雷达效果(力场闪烁) 核心代码完整代码在线示例Cesium 给实体对象(Entity)提供了很多实用的样式,基本满足普通项目需求; 但是作为 WebGL 引擎,肯定不够丰富,尤其是动态效果样式。 对于实体对象(Entity),可以通过自定义材…

后端Web之数据库(以MySQL为例)

目录 1.概述 2.MySQL 3.DDL 4.DML 5.DQL 1.概述 对于我们自己写的一些小功能,数据一般存储在文件中,比如XML文件。而在实际项目中,数据都是存放在数据库中的。数据库(DataBase )是一个存储数据的集合&#xff0c…

OpenCv图像处理: 时域滤波与频域滤波

时域滤波: 空间域滤波的步骤一般如下: 1. 选择滤波器 选择一种低通滤波器,常见的包括: 均值滤波(平均滤波器)高斯滤波(Gaussian filter) 2. 定义滤波器核 根据选择的滤波器类型&…