当前位置: 首页 > article >正文

go桌面框架Fyne最全api文档

Fyne 是一个 Go 语言的跨平台 GUI 库

相关命令

//全局安装fyne打包工具
go install fyne.io/fyne/v2/cmd/fyne@latest

// 引入fyne库
go get fyne.io/fyne/v2@latest
go mod tidy

//以窗口形式启动
go run main.go
//以手机模拟器形式启动
go run -tags mobile main.go

//打包
//桌面端
fyne package -os windows -icon icon.png

//移动端
fyne package -os android -appID my.domain.appname
fyne install -os android

fyne package -os ios -appID my.domain.appname
fyne package -os iossimulator -appID my.domain.appname

基本示例

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("Hi!", func() {
			hello.SetText("Welcome :)")
		}),
	))

	w.ShowAndRun()
}

1. app

  • app.New():创建一个新的 Fyne 应用实例。
  • app.NewWithID(id string):创建带有唯一标识的应用实例,用于在不同会话间共享数据。
  • app.NewWindow(title string):为应用创建一个新窗口。

2. canvas

  • canvas.NewText(text string, color color.Color):创建文本元素,可自定义颜色。
  • canvas.NewRectangle(color color.Color):创建一个矩形图形,可用于绘制背景或形状。
  • canvas.NewCircle(color color.Color):创建一个圆形图形。
  • canvas.NewImageFromFile(filename string):加载并显示文件中的图像。
  • canvas.NewLine(color color.Color):创建一条直线,用于简单的图形绘制。

3. container

  • container.NewVBox(objects ...fyne.CanvasObject):创建一个垂直布局容器,按顺序从上到下排列内容。
  • container.NewHBox(objects ...fyne.CanvasObject):创建一个水平布局容器,按顺序从左到右排列内容。
  • container.NewGridWithRows(rows int, objects ...fyne.CanvasObject):按指定行数创建网格布局容器。
  • container.NewTabContainer(tabs ...*container.TabItem):创建带选项卡的容器。
  • container.NewBorderContainer(top, bottom, left, right fyne.CanvasObject, content fyne.CanvasObject):创建边框布局容器,四边可固定元素,中间为内容区域。

4. dialog

  • dialog.NewConfirm(title string, message string, onConfirm func(bool), parent fyne.Window):确认对话框,带确认和取消按钮。
  • dialog.NewInformation(title string, message string, parent fyne.Window):信息对话框,用于显示信息性消息。
  • dialog.ShowFileOpen(callback func(fyne.URIReadCloser, error), parent fyne.Window):打开文件选择器对话框。
  • dialog.ShowFileSave(callback func(fyne.URIWriteCloser, error), parent fyne.Window):打开文件保存对话框。
  • dialog.ShowCustom(title string, dismiss string, content fyne.CanvasObject, parent fyne.Window):自定义对话框,允许自定义内容。

5. widget

  • widget.NewLabel(text string):创建文本标签。
  • widget.NewButton(label string, tapped func()):创建按钮,点击时触发指定事件。
  • widget.NewEntry():创建文本输入框,用户可输入单行文本。
  • widget.NewPasswordEntry():创建密码输入框,输入的文本被掩盖。
  • widget.NewForm(items ...*widget.FormItem):创建表单,支持不同类型的输入控件。
  • widget.NewSelect(options []string, changed func(string)):下拉选择框,提供多个选择项。
  • widget.NewCheck(label string, changed func(bool)):复选框,可选中或取消选中。
  • widget.NewRadio(options []string, selected func(string)):单选框组,提供多个单选项。
  • widget.NewSlider(min, max float64):滑动条,可选择范围值。
  • widget.NewProgressBar():进度条,用于表示任务的进度。

6. theme

  • theme.DefaultTheme():获取默认主题。
  • theme.NewLightTheme():获取亮色主题。
  • theme.NewDarkTheme():获取暗色主题。
  • theme.Icon(name fyne.ThemeIconName):获取系统内置图标。
  • theme.Font(size int):获取字体样式和大小。

7. layout

  • layout.NewSpacer():创建一个空白填充区域,用于调整组件间的间距。
  • layout.NewVBoxLayout():垂直布局,将内容从上到下排列。
  • layout.NewHBoxLayout():水平布局,将内容从左到右排列。
  • layout.NewGridLayout(rows int):网格布局,按指定行数排列内容。
  • layout.NewBorderLayout(top, bottom, left, right fyne.CanvasObject):边框布局,四边固定内容。

8. fyne 包(核心接口)

  • fyne.App:应用程序接口,用于启动和管理窗口。
  • fyne.Window:窗口接口,表示应用程序中的窗口。
  • fyne.CanvasObject:所有UI组件的基本接口。
  • fyne.Container:容器接口,用于包含和布局多个组件。
  • fyne.Theme:主题接口,用于自定义应用程序外观。
  • fyne.URIReadCloserfyne.URIWriteCloser:文件读写接口,用于读取和保存文件。

实战示例

1. 应用程序基础设置(app 包)

  • 创建应用实例、窗口,并设置内容。
package main

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

func main() {
	myApp := app.New()                    // 创建应用实例
	myWindow := myApp.NewWindow("Hello")   // 创建窗口实例
	label := widget.NewLabel("Hello, Fyne") // 创建标签

	myWindow.SetContent(container.NewVBox(
		label,
		widget.NewButton("点击我", func() {
			label.SetText("按钮被点击了!")
		}),
	)) // 将标签和按钮加入窗口内容

	myWindow.ShowAndRun() // 显示窗口并运行应用
}

2. 文本输入框与按钮(widget 包)

  • 创建带输入框和按钮的简单表单,点击按钮显示输入内容。
package main

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

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("输入框示例")

	entry := widget.NewEntry()
	entry.SetPlaceHolder("请输入内容")

	button := widget.NewButton("提交", func() {
		fmt.Println("输入内容:", entry.Text)
	})

	myWindow.SetContent(container.NewVBox(
		entry,
		button,
	))

	myWindow.ShowAndRun()
}

3. 文件选择对话框(dialog 包)

  • 打开文件选择器,选择文件后显示文件路径。
package main

import (
	"fmt"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/dialog"
	"fyne.io/fyne/v2/widget"
)

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("文件选择器示例")

	label := widget.NewLabel("文件路径会在这里显示")
	button := widget.NewButton("选择文件", func() {
		dialog.ShowFileOpen(func(reader fyne.URIReadCloser, err error) {
			if err == nil && reader != nil {
				label.SetText("文件路径: " + reader.URI().Path())
				fmt.Println("选择的文件路径:", reader.URI().Path())
			}
		}, myWindow)
	})

	myWindow.SetContent(container.NewVBox(
		button,
		label,
	))

	myWindow.ShowAndRun()
}

4. 布局示例(container 包)

  • 使用 HBoxVBox 布局容器。
package main

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

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("布局示例")

	hBox := container.NewHBox(
		widget.NewButton("左", nil),
		widget.NewButton("中", nil),
		widget.NewButton("右", nil),
	)

	vBox := container.NewVBox(
		widget.NewLabel("上"),
		hBox,
		widget.NewLabel("下"),
	)

	myWindow.SetContent(vBox)
	myWindow.ShowAndRun()
}

5. 进度条(widget 包)

  • 创建一个进度条,并模拟进度变化。
package main

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

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("进度条示例")

	progress := widget.NewProgressBar()
	progress.SetValue(0.0)

	myWindow.SetContent(container.NewVBox(
		progress,
	))

	go func() {
		for i := 0.0; i <= 1.0; i += 0.1 {
			time.Sleep(time.Second)
			progress.SetValue(i)
		}
	}()

	myWindow.ShowAndRun()
}

6. 选项卡布局(container 包)

  • 创建带有多个选项卡的窗口。
package main

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

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("选项卡示例")

	tab1 := container.NewTabItem("Tab 1", widget.NewLabel("这是第一个选项卡"))
	tab2 := container.NewTabItem("Tab 2", widget.NewLabel("这是第二个选项卡"))

	tabContainer := container.NewAppTabs(tab1, tab2)

	myWindow.SetContent(tabContainer)
	myWindow.ShowAndRun()
}

7. 自定义对话框(dialog 包)

  • 创建带自定义内容的对话框。
package main

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

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("自定义对话框示例")

	button := widget.NewButton("打开对话框", func() {
		content := widget.NewLabel("这是一个自定义对话框")
		dialog.ShowCustom("标题", "关闭", content, myWindow)
	})

	myWindow.SetContent(container.NewVBox(
		button,
	))

	myWindow.ShowAndRun()
}

应用打包

使用 Fyne 打包 Go 应用程序可以通过 fyne 的命令行工具完成。该工具支持将应用程序打包成可执行文件,并生成不同平台的包格式(如 .app.exe 等)。

步骤 1:安装 fyne 命令行工具

安装 fyne 命令行工具。如果未安装,可以通过以下命令安装:

go install fyne.io/fyne/v2/cmd/fyne@latest

步骤 2:配置应用程序的图标和元数据

在打包之前,最好为应用程序设置图标和元数据,fyne 使用 fyne package 命令自动加载这些信息。可以通过设置 fyne 提供的以下标签完成配置。

创建一个 fyne.yml 文件(或直接在 go 文件中使用注释)并填写以下内容:

配置文件:fyne.yml
name: MyApp                  # 应用名称
icon: "icon.png"             # 应用图标,放在项目根目录
version: "1.0.0"             # 版本号

步骤 3:构建并打包应用程序

fyne 工具支持跨平台构建,以下是常见平台的打包方法。

1. 本地平台打包

在项目目录中运行以下命令,将应用程序打包成当前系统的可执行文件:

fyne package

执行后,会在当前目录生成一个对应平台的可执行文件:

  • Windows:生成 .exe 文件。
  • macOS:生成 .app 文件。
  • Linux:生成标准的可执行文件。
2. 指定平台打包

fyne 支持交叉编译和打包。可以使用环境变量来指定目标平台:

打包 Windows 应用程序
GOOS=windows GOARCH=amd64 fyne package -os windows
打包 macOS 应用程序
GOOS=darwin GOARCH=amd64 fyne package -os darwin
打包 Linux 应用程序
GOOS=linux GOARCH=amd64 fyne package -os linux
3. 指定输出文件名

可以使用 -output 标志指定生成文件的名称,例如:

fyne package -output MyApp

步骤 4:生成安装包(可选)

fyne 还支持生成平台专用的安装包,例如 macOS 的 .dmg 文件或 Windows 的 .msi 文件。可以通过以下方式生成这些安装包:

Windows 的 .msi 安装包
fyne package -os windows -icon icon.png -appID "com.mycompany.myapp" -install
macOS 的 .dmg 安装包
fyne package -os darwin -icon icon.png -appID "com.mycompany.myapp" -install
Linux 的 .deb 安装包
fyne package -os linux -icon icon.png -appID "com.mycompany.myapp" -install

示例:打包一个 Windows 可执行文件

假设您有一个 Windows 环境,运行以下命令来生成带图标的 .exe 文件:

fyne package -os windows -icon icon.png

步骤 5:测试和发布

生成的应用程序可以直接运行以测试功能。确保在每个平台上测试以验证应用的兼容性,之后即可将打包的文件上传至发布平台(如 GitHub、应用商店或公司内部系统)。

通过 fyne 的打包工具,可以方便地将 Fyne 应用分发到不同平台,支持跨平台开发的需求。

运行效果

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/387172.html

相关文章:

  • 使用docker-compose单点搭建社区版seafile+onlyoffice在线word编辑平台
  • 动态规划与贪心算法:核心区别与实例分析
  • 【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)
  • 实现3D热力图
  • 由于找不到mfc120u.dll, 无法继续执行代码。重新安装程序可能解决引问题。
  • MFC图形函数学习07——画扇形函数
  • PVE纵览-深入了解PVE中的防火墙功能
  • 数组和字符串的es6新方法使用和综合案例
  • 华为OD机试真题-矩形绘制
  • 跨线程GCHandle,如何使用PinnedIntArray等结构来管理内存,以及如何确保在处理完成后释放资源。
  • 软件知识:什么是软件工程?
  • 【前端】Svelte:组件封装与使用
  • 校园周边美食探索及分享平台
  • C#里使用预定义函数来对数组进行翻转
  • 美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年
  • [产品管理-60]:产品的情感化设计与常用工具:感性工学、情感分析、神经网络法、微软反应卡、突发情绪法
  • jmeter结合ansible分布式压测--1数据准备
  • 使用docker形式部署jumpserver
  • oracle-函数-grouping sets(x1,x2,x3...)的妙用
  • Go语言开发商城管理后台-GoFly框架商城插件已发布 需要Go开发商城的朋友可以来看看哦!
  • 【wpf】ResourceDictionary 字典资源的用法
  • 系统架构师2023版:习题
  • 七大AI知识库工具概览
  • 搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验
  • Windows10 下通过 Visual Studio2022 编译 openssl 3.4
  • go语言使用总结(持续更新)