使用 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.mzph.cn/bicheng/52168.shtml

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

相关文章

「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)

目录 概述 思路 核心概念:前缀函数 1.前缀函数 2.next数组 1.考研版本 2.竞赛版本 算法过程 构建next数组 匹配过程 复杂度 Code 概述 为什么大家总觉得KMP难?难的根本就不是这个算法本身。 在互联网上你可以见到八十种KMP算法的next数组…

项目1 物流仓库管理系统

一、项目概述 本项目旨在开发一个功能全面的物流仓库管理系统,以数字化手段优化仓库作业流程,提高管理效率。系统集成了前端用户交互界面与后端数据处理逻辑,涵盖了从用户注册登录、订单管理、货单跟踪到用户信息维护等多个核心业务模块。通…

基于django的学生作业提交与管理系统,有管理后台,可作为课设使用

在本项目中,我们设计并实现了一个基于Django框架的学生作业提交与管理系统,旨在为教师和学生提供一个高效、便捷的作业管理平台。Django作为一个高效的Web框架,因其强大的功能和灵活的架构,使得本系统能够快速开发并扩展。 系统功…

Maven的简单使用

Maven使用 Maven的作用1. 自动构建标准化的java项目结构(1) 项目结构① 约定目录结构的意义② 约定大于配置 (2)项目创建坐标坐标的命名方法(约定) 2. 帮助管理java中jar包的依赖(1) 配置使用依赖引入属性配置 (2) maven指令(3) 依赖的范围(4) 依赖传递(…

【密码学】密钥管理:②密钥分配

一、密钥分配的定义 密钥分配是密钥管理生命周期中最重要的部分,密钥分配方案研究的是密码系统中密钥的分发和传送问题。从本质上讲,密钥分配为通信双方建立用于信息加密、解密签名等操作的密钥,以实现保密通信或认证签名等。 (1…

华为OD题目 csv格式的数据 字符串 用C没写出来

这题对于嵌入式mcu的人来说,太难为了。不想解了,烂摆。有心情再说把。 将一个csv格式的数据文件中包含有单元格引用的内容替换为对应单元格内容的实际值。 Comma seprated values(CSV)逗号分隔值,csv格式的数据文件使用…

win10蓝牙只能发送,无法接收

给win10升了级,到22H2,蓝牙出了问题 以前接收,就是默认直接就可以接收。现在只能发送,无法接收。 在网上找了很多办法都没奏效,目前的方法是, 每次接收,都要操作一次,而不是自动接…

leetcode-538. 把二叉搜索树转换为累加树

题目描述 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束…

计量自动化终端上行通信规约

物理层 TCP 和 UDP 的传输接口 该类接口的登录链接和心跳检测采用链路测试服务,链路测试周期可设定。 参见 TCP/IP 协议规范。 串行通信传输接口 字节传输按异步方式进行,它包含 8 个数据位、1 个起始位“0”、1 个偶校验位 P 和 1 个停止位“1”。 …

构建第一个Spring项目

首先创建一个maven项目&#xff0c;具体参考maven项目的创建 引入依赖 在pom.xml文件中导入spring的依赖坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version…

用Go实现伪静态URL重写功能

在Web开发中&#xff0c;伪静态URL已成为优化网站架构和提升SEO的常用技术手段。尤其是在内容管理系统&#xff08;CMS&#xff09;中&#xff0c;灵活的URL重写功能不仅能改善用户体验&#xff0c;还能帮助网站更好地与搜索引擎对接。URL的可读性和结构化直接影响搜索引擎的索…

Linux下如何使用Cron定时任务

Cron是一个在Linux系统中用于自动化定时任务的工具。它可以帮助用户在指定的时间间隔内运行特定的命令或脚本。在本文中&#xff0c;我们将介绍如何在Linux系统中使用Cron定时任务。 Cron是一个后台服务&#xff0c;用于执行计划任务&#xff0c;该服务会根据系统的时间表来定…

Android Studio 动态表格显示效果

最终效果 一、先定义明细的样式 table_row.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_h…

集团数字化转型方案(四)

集团数字化转型方案通过全面部署人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;技术&#xff0c;创建了一个智能化的企业运营平台&#xff0c;涵盖从业务流程自动化、实时数据监控、精准决策支持&#xff0c;到个性化客户服务和高…

实验七:独立按键实验

硬件电路图和题目; LED1-LD8是 P2口8个管脚 mian.c #include<reg52.h>sbit But1=P3^1 ; sbit But2=P3^0 ; sbit But3=P3^2 ; sbit But4=P3^3 ;sbit LED1 =P2^0 ; sbit LED2 =P2^1 ; sbit LED3 =P2^2 ; sbit LED4 =P2^3 ;#define PRESS_1 1 #define PRESS_…

SpringBoot内部模拟http请求到Controller(不通过本机网络)

使用场景: 1. 想实现自定义协议请求数据,但是还有拥有spring的 controller方便的业务处理流程和注解。 2. 想要调用对应的 controller 却不想处理自定义的 mapping。 一、首先是通过参考 spring-test 中的模拟实现的HttpServlet <dependency><groupId>org.spri…

CUTLASS 中的 47_ampere_gemm_universal_streamk 示例

前一篇文章介绍了 Stream-K: Work-centric Parallel Decomposition for Dense Matrix-Matrix Multiplication on the GPU 论文&#xff0c;下面对其代码实现进行分析。 cutlass 的 examples/47_ampere_gemm_universal_streamk 展示了 GEMM Stream-K 算法在 Ampere 架构上的使用…

Java 网络编程练习

InternetExercise1 package InternetExercise20240815;public class InternetExercise1 {public static void main(String[] args) {// 网络编程// 在网络通信协议下&#xff0c;不同计算机上面运行的程序&#xff0c;可以实现不同计算机上的数据传输// 网络编程三要素// 1.IP…

JNPF 5.0升级钜惠,感恩回馈永远在路上

尊敬的JNPF用户们&#xff1a; 经过引迈团队数月的辛勤努力和不断的技术创新&#xff0c;JNPF快速开发平台迎来全新升级——5.0版本&#xff01;此次5.0版本的迭代革新&#xff0c;不仅代表着我们技术实力的进一步提升&#xff0c;是我们对用户需求的深度理解和积极回应。为了…

重修设计模式-创建型-单例模式

重修设计模式-创建型-单例模式 一个类只允许创建一个对象&#xff08;或实例&#xff09;&#xff0c;那这个类就是一个单例类&#xff0c;这种模式叫做单例设计模式。 单例的主要使用场景有两个&#xff0c;一是使用单例控制全局的资源访问&#xff0c;也就是用单例封装一些工…