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

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 androidfyne package -os ios -appID my.domain.appname
fyne package -os iossimulator -appID my.domain.appname

基本示例

package mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("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.mrgr.cn/news/69634.html

相关文章:

  • 搜维尔科技:SenseGlove触觉反馈手套开箱+场景测试
  • MySQL —— MySQL逻辑架构与查询过程
  • 蓝桥杯每日真题 - 第7天
  • 数据结构中数据有序性/ 单调性 ——二分查找
  • PostgreSQL 数据加密和数据解密
  • Spring Boot 的生命周期
  • 释放创作潜力!Flux 模型现已集成至 ComfyUI,快来体验!
  • 2024程序员,转行还是不转行,必须严肃想一想?(一条120W+阅读的讨论)
  • SpringCloudalibaba 集成 Knife4j 的时候出现多余的 前缀
  • Java | Leetcode Java题解之第554题砖墙
  • 动态规划(简单多状态 dp 问题 1.按摩师 2.打家劫舍 II 3. 删除并获得点数 4.粉刷房子 5.买卖股票的最佳时机(全系列))
  • php 之添加图片水印,根据比例计算水印的新尺寸
  • 【计网】实现reactor反应堆模型 --- 处理数据发回问题 ,异常处理问题
  • 【Linux】【线程操作与同步】汇总整理
  • 鸿蒙next版开发:ArkTS组件通用属性(图形变换)
  • AndroidStudio-视图基础
  • 链表的使用
  • 《Agent 工作流 2025》
  • AI与OCR:数字档案馆图像扫描与文字识别技术实现与项目案例
  • 01_docker安装
  • STM32各模块
  • Elasticsearch 实战应用:高效搜索与数据分析
  • 网络编程中非阻塞的实现方式
  • 540. 有序数组中的单一元素
  • SimpleMemory 博客园主题美化
  • 如何自己实现事件的订阅和发布呢?