第一个fyne应用

第一个fyne应用

由于在写一个milvus的图形化工具,方便客户端使用,调研了一下只有这fyne的go-gui的star最多,比较流行,因此打算使用这个框架来进行milvus的工具开发。

第一个fyne应用

依赖go.mod:

module fynedemo

go 1.20

require fyne.io/fyne/v2 v2.4.5

main.go

package main

import (
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/widget"
)

func main() {
	a := app.New()
	w := a.NewWindow("golang")
    label := widget.NewLabel("golang-tech-stack.com")
	w.SetContent(label)
	w.ShowAndRun()
}

第一次build会比较慢。

go build .
或者
go run main.go

图形界面:

在这里插入图片描述

代码分析

a := app.New()

app.New()返回类型fyne.App,返回一个使用默认驱动的应用实例,fyne.App是一个接口

type App interface {
    NewWindow(title string) Window
    OpenURL(url *url.URL) error
    Icon() Resource
    SetIcon(Resource)
    Run()
    Quit()
    Driver() Driver
    UniqueID() string
    SendNotification(*Notification)
    Settings() Settings
    Preferences() Preferences
    Storage() Storage
    Lifecycle() Lifecycle
    Metadata() AppMetadata
    CloudProvider() CloudProvider
    SetCloudProvider(CloudProvider)
}

图形应用的定义,应用程序可以有多个窗口,默认情况下,当所有窗口都关闭时,它们将退出。这可以使用SetMaster()或SetCloseIntercept()进行修改。要启动应用程序,您需要在main()函数中的某个位置调用Run()。注意是fyne.App的Run()。或者使用window.ShowAndRun()函数。

app.New()返回的是app.fyneApp结构体。

type fyneApp struct {
	driver   fyne.Driver
	icon     fyne.Resource
	uniqueID string

	cloud     fyne.CloudProvider
	lifecycle fyne.Lifecycle
	settings  *settings
	storage   fyne.Storage
	prefs     fyne.Preferences

	running uint32 // atomic, 1 == running, 0 == stopped
}

driver的实例是glfw.gLDriver。

fyne.Driver是一个接口,有个2个实现:glfw.gLDriver和mobile.mobileDriver。glfw.gLDriver使用在桌面,mobile.mobileDriver使用在手机端。

下面分析NewWindow()

w := a.NewWindow("golang")

NewWindow()的返回的类型是fyne.Window,是一个接口。它的功能是为应用程序创建一个新窗口。打开的第一个窗口被视为“主窗口”,关闭后应用程序将退出。

type Window interface {
    Title() string
    SetTitle(string)
    FullScreen() bool
    SetFullScreen(bool)
    Resize(Size)
    RequestFocus()
    FixedSize() bool
    SetFixedSize(bool)
    CenterOnScreen()
    Padded() bool
    SetPadded(bool)
    Icon() Resource
    SetIcon(Resource)
    SetMaster()
    MainMenu() *MainMenu
    SetMainMenu(*MainMenu)
    SetOnClosed(func())
    SetCloseIntercept(func())
    SetOnDropped(func(Position, []URI))
    Show()
    Hide()
    Close()
    ShowAndRun()
    Content() CanvasObject
    SetContent(CanvasObject)
    Canvas() Canvas
    Clipboard() Clipboard
}

fyne.Window有2个实现:glfw.window和mobile.window。

在本例中是glfw.window。

下面分析widget.NewLabel()

label := widget.NewLabel("golang-tech-stack.com")

NewLabel()使用设置的文本内容创建一个标签小部件。

NewLabel()返回widget.Label,是一个结构体。

type Label struct {
    BaseWidget
    Text       string
    Alignment  fyne.TextAlign
    Wrapping   fyne.TextWrap
    TextStyle  fyne.TextStyle
    Truncation fyne.TextTruncation
    Importance Importance
    provider   *RichText
    binder     basicBinder
}

下面分析w.SetContent()

w.SetContent(label)

SetContent()设置窗口内容。

label是一个fyne.CanvasObject接口类型。

type CanvasObject interface {
    MinSize() Size
    Move(Position)
    Position() Position
    Resize(Size)
    Size() Size
    Hide()
    Visible() bool
    Show()
    Refresh()
}

CanvasObject接口的实现就有widget.Label,还有widget.Button、widget.Check等。

下面分析w.ShowAndRun()

w.ShowAndRun()

ShowAndRun()是显示窗口然后运行应用程序的快捷方式。这应该在main()函数末尾调用,因为它会阻塞。

func (w *window) ShowAndRun() {
	w.Show()
	w.driver.Run()
}

总结

流程如下:

  • 创建一个应用
  • 创建一个窗口
  • 设置内容,内容可以是label、button、check等
  • 显示窗口并运行

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【自然语言处理】【大模型】DeepSeek-V2论文解析

论文地址:https://arxiv.org/pdf/2405.04434 相关博客 【自然语言处理】【大模型】DeepSeek-V2论文解析 【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM 【自然语言处理】BitNet b1.58:1bit LLM时代 【自然语言处理】【长文本…

k8s环境部署的集成arthas-spring-boot-starter spingboot项目无法访问控制台

前言 k8s环境部署的集成arthas-spring-boot-starter项目无法访问控制台,springboot项目集成arthas-spring-boot-starter 会自带个控制台 供我们访问 但是当使用k8s环境部署后 这个页面就无法访问了 分析 首先看下arthas对应的配置 arthas-spring-boot-starter 中…

数据结构(C):树的概念和二叉树初见

目录 🍺0.前言 1.树概念及结构 2.认识一棵树 3.树的表示 3.1树在实际中的运用(表示文件系统的目录树结构) 4.二叉树 4.1特殊的二叉树 4.2二叉树的性质 💎5.结束语 🍺0.前言 言C之言,聊C之识&…

先有JVM还是先有垃圾回收器?很多人弄混淆了

是先有垃圾回收器再有JVM呢,还是先有JVM再有垃圾回收器呢?或者是先有垃圾回收再有JVM呢?历史上还真是垃圾回收更早面世,垃圾回收最早起源于1960年诞生的LISP语言,Java只是支持垃圾回收的其中一种。下面我们就来刨析刨析…

实验三:机器学习1.0

要求: 针对实验1和实验2构建的数据集信息分析 设计实现通过数据简介进行大类分类的程序 代码实现: 训练集数据获取: read_data.py import json import pickledef read_intro():data []trypathr"E:\Procedure\Python\Experiment\f…

【计算机毕业设计】springboot城市公交运营管理系统

二十一世纪我们的社会进入了信息时代, 信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

wefaf

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

算法学习(7)-树

目录 开启“树”之旅 二叉树 堆--优先队列 并查集 开启“树”之旅 是不是很像一棵倒挂的树?也就是说它是根朝上, 而叶子朝下的。不像?哈哈,来看看下面的图你就会觉得像啦。 你可能会间: 树和图有什么区别&#xff…

纯血鸿蒙APP实战开发——Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压成功后将解压路径返回主线程,获取解压文件列表。 效果图预览 使用说明 点击解压按钮,解压test.zip文件,显…

ArcGIS10.X入门实战视频教程(arcgis入门到精通)

点击学习: ArcGIS10.X入门实战视频教程(GIS思维)https://edu.csdn.net/course/detail/4046?utm_sourceblog2edu 点击学习: ArcGIS10.X入门实战视频教程(GIS思维)https://edu.csdn.net/course/detail/404…

用SwitchHosts模拟本地域名解析访问

一.用SwitchHosts模拟本地域名解析访问 1.下载地址 https://download.csdn.net/download/jinhuding/89313168 2.使用截图

Python自动化SQL注入和数据库取证工具库之sqlmap使用详解

概要 在网络安全领域,SQL注入仍然是最常见的攻击之一。sqlmap是一个开源的自动化SQL注入和数据库取证工具,它提供了广泛的功能来检测和利用SQL注入漏洞。本文将详细介绍sqlmap的安装、特性、基本与高级功能,并结合实际应用场景,展示其在网络安全测试中的应用。 安装 sqlm…

激光打标机:手机制造中不可或缺的加工设备

激光打标机在手机行业中有多种应用,主要体现在以下几个方面: 1. 手机外壳打标:光纤激光打标机在手机外壳上打标的痕迹非常美观,可以印上厂家品牌标识,既保证了手机外壳的美观,也提高了产品的打标质量和加工…

云曦实验室期中考核题

Web_SINGIN 解题: 点击打开环境,得 查看源代码,得 点开下面的超链接,得 看到一串base64编码,解码得flag 简简单单的文件上传 解题: 点击打开环境,得 可以看出这是一道文件上传的题目&#x…

2024年最新软件测试面试题必问的1000题!

我了解的测试理论和方法包括以下几个方面: 黑盒测试与白盒测试: 黑盒测试:基于对软件系统外部行为进行测试,独立于内部代码实现细节。黑盒测试关注输入与输出之间的关系以及软件功能是否符合预期。白盒测试:基于对软件…

搭载全新升级viaim AI,讯飞会议耳机Pro 2首销价1399元起

2024年5月15日,人工智能硬件公司未来智能发布了讯飞会议耳机Pro 2、iFLYBUDS 2以及Kit 2三款旗舰新品,为用户带来全新升级的viaim AI,也为AIGC智能耳机树立了新标杆。 在发布会上,未来智能CEO马啸表示:在AIGC领域&…

基于EBAZ4205矿板的图像处理:05均值滤波算法

基于EBAZ4205矿板的图像处理:05均值滤波算法 项目全部文件已经上传,是免费的 先看效果 可以明显看到图像变糊了,这就是均值滤波的特点,将噪声均摊到每个点上的同时,也会让图像丢失细节。 算法讲解 均值滤波&#x…

连锁收银系统如何助力实体门店私域运营

作为实体门店,私域运营是提升客户黏性和增加复购率的重要策略之一。而连锁收银系统在私域运营中扮演了关键的角色,它不仅可以帮助门店管理客户信息和消费记录,还能够通过数据分析和营销功能提供个性化的服务和推广活动。下面看看连锁收银系统…

STM32F407 2个高级定时器生成2路无刷电机波形以及相电流采集程序(寄存器版)

stm32f407 高级定时1、定时8 生成20k 中心PWM 波形 并分别用其通道4 触发ADC1 ADC2 采样 用于分别两无刷电机foc 电流环控制,ADC1产生50us的电流采集完成中断,用于foc算法周期运算 主要参考高级定时器的寄存器和ADC寄存器 首先,要使用STM32F…

libcity笔记: HSTLSTMEncoder

1 __init__ 2 encode 得到的内容如下: data_feature的内容: 一共有多少个location1【包括pad的一个】最长的时间间隔(秒)最长的距离间隔(千米)多少个useer idpadding 的locationidpad_item的内容 location…