第一个fyne应用

news2024/11/24 5:33:28

第一个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等
  • 显示窗口并运行

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

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

相关文章

BGP学习三:BGP路由优选12条规则,闪亮登场啦啦啦啦啦

目录 一.BGP策略工具 (1)Router-policy作用 (2)组成部分 (3)router-policy注意事项 二.优选规则 ①丢弃下一跳不可达 (1)优选prefered-value值大的路由 1.首选优先级 (2)优选local-preference(本地…

绿色消费新趋势:共享购模式的积分革命

在当今绿色消费风潮中,一种名为共享购的新模式正悄然兴起,它通过创新的绿色积分机制,不仅鼓励了消费者的绿色消费行为,还为消费者和商家带来了更多的实惠与额外收益。 传统积分机制的局限 在传统的消费积分模式中,消费…

VMware Workstation 安装CentOS Linux操作系统

1.我们已经下载好VMware 创建新的虚拟机 2.选择典型 3.安装程序光盘映像文件 4.配置用户名密码 5.命名虚拟机,并确定位置 6.如图所示设置 7.等待(时间会有点久) 8.输入密码登入账号

高德、百度开车导航APP是怎么知道红绿灯倒计时的?

高德、百度开车导航APP之所以能够知道红绿灯的倒计时,这背后是一系列复杂的科技手段和数据分析的综合运用。从交管部门提供的数据,到导航软件自身通过大数据和算法进行的计算,每一个环节都为红绿灯倒计时的准确呈现提供了支撑。 首先&#xf…

XMind 头脑风暴/思维导图软件_V24.04.10291 PC高级版

一款风靡全球的头脑风暴和思维导图软件,为激发灵感和创意而生。在国内使用广泛,拥有强大的功能,包括思维管理,商务演示,与办公软件协同工作等功能。XMind中文版采用全球先进的Eclipse RCP软件架构,是集思维…

搞大事!法国邀请芬兰公司建量子工厂

法国当地时间5月13日,法国总统马克龙宣布启动2024年度“选择法国”(Choose France)商业峰会。今年峰会召开前,法国赢得了创纪录的150亿欧元外国投资承诺,覆盖从人工智能到制药和能源等领域。 而涉及到量子领域最重磅的…

技术架构

一、单机架构 简介:应用服务和数据库服务共用一台服务器 出现原因:出现在互联网早期,访问量比较小,单机足以满足 架构工作原理:以电商为例,可以看到通过应用(划分了多个模块)和数据库在单个服…

能自动化视频剪辑的开源工具来了 剪辑师、自媒体作者狂喜

项目简介 Funclip 是阿里巴巴通义实验室开源的一款视频剪辑工具,专门用于精准、便捷的视频切片。 它能够自动识别视频中的中文语音并允许用户根据语音内容来裁剪视频。该工具使用了阿里巴巴语音识别模型FunASR Paraformer-Large确保了剪辑的精准性。 你可以根据识…

聚鼎科技:装饰画行业到底怎么样

在当代社会,随着人们审美水平的提升和生活品质的追求,装饰画行业呈现出蓬勃的发展态势。这一行业不仅关系到文化艺术的传承与创新,也与市场经济紧密相连,其前景值得深入探讨。 装饰画行业的市场潜力巨大,它贯穿于家居装…

其它高阶数据结构②_图(概念+存储+遍历+最小生成树)

目录 1. 图的概念 2. 图的存储结构 2.1 邻接矩阵(后面算法所用) 2.2 邻接表 3. 图的遍历 3.1 BFS广度优先遍历 3.2 DFS深度优先遍历 4. 最小生成树 4.1 Kruskal算法 4.2 Prim算法 本篇完。 1. 图的概念 图是由顶点集合及顶点间的关系组成的一…

AI 绘画神器 Fooocus 图生图:图像放大或变化、图像提示、图像重绘或扩充、反推提示词、生成参数提取、所需模型下载

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本文讲述 Fooocus 的图生图功能,主要内容包括:图像放大或变化、图像提示、图像重绘或扩充、反推…

没有疯狂内卷的日本智能机市场,小屏与设计仍旧是主流

如果聊起国内的智能机市场,我想大多数人的印象就是疯狂内卷。卷影像、卷屏幕、卷快充、卷性能……客观地说,国内的3C产品还是很有质价比的。不过在没有如此内卷的日本市场,各种小屏手机仍旧是主流。 除了苹果外,日本本土品牌的夏普…

SDL系列(四)—— 事件机制

事件循环 大多数多媒体程序依靠 事件系统 来处理输入。 SDL 为处理输入事件提供了灵活的 API 。 本质上, SDL 将来自设备(如键盘,鼠标或控制器)的输入记录为 事件 ,将它们存储在 “ 事件队列 ”中。 您可以将此…

3D轻量化引擎HOOPS Communicator在PLM全生命周期管理中的应用

在当今快速发展的工业领域,产品生命周期管理(PLM)是确保产品从设计到市场再到最终退役过程中信息一致性和流程效率的关键。 随着3D模型的日益复杂化和数据量的不断增长,传统的PLM系统面临着数据管理和渲染效率的挑战。HOOPS Comm…

pandas dataframe 的几种过滤数据的方法

pandas dataframe简介 Pandas是一个用于数据科学的开源Python库。这个库在整个数据科学行业被广泛使用。它是一个快速和非常强大的python工具来执行数据分析。Pandas为我们提供了读取、过滤、检查、操作、分析和绘制数据的命令。它使用内置函数加载以各种文件格式存储的数据&a…

圆片/圆盘测厚设备 HW01-SG系列单点测厚仪

关键字:圆片测厚仪圆盘测厚仪, 圆形测厚仪, 单点测厚仪, 汽车工件测厚仪, 产品简介: 测厚仪采用上下两个对射的激光位移传感器测量圆盘状物体边缘的厚度。圆盘放置在由步进电机驱动的托盘上,点按测量按钮托盘旋转一周,可测量被测物整个圆周上…

三:哈希map day6 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

今日任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 今日任务 242.有效的字母异位词 题目 大型概括:map 的使用 1.题目描述-->思路: 给出两个string s,t; …

开放式运动耳机哪款好用?五款高性能值得信赖产品推荐

身为户外运动的达人,我发现开放式运动耳机简直是咱们运动时的最佳拍档,不管是跑步还是健身,开放式运动耳机最为舒适,它的妙处就在于不用塞进耳朵,这样既安全又卫生,户外动起来更放心。但市面上好坏参半&…

SDL系列(一)—— 小白入门

SDL ( Simple DirectMedia Layer ) 是一套开放源代码的 跨平台多媒体开发库 ,使用 C 语 言写成。 SDL 提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的 代码就可以开发出 跨多个平台( Linu…

线上3D博物馆搭建简单吗?有何优势?有哪些应用场景?

随着科技的飞速发展,传统的博物馆参观方式正在经历一场前所未有的变革,在科技的“加持”下,不少博物馆凭借强大的技术、创意和美学实践,频频“出圈”,线上3D博物馆逐渐崛起,这不仅丰富了人们的文化体验&…