news 2026/4/18 12:06:20

go桌面框架Fyne最全api文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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应用分发到不同平台,支持跨平台开发的需求。

运行效果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:31:09

交通仿真软件:Aimsun_(4).路网建模

路网建模 1. 路网建模基础 在交通仿真软件中&#xff0c;路网建模是仿真过程的基础和核心。路网建模涉及到对现实世界中的交通网络进行数字化表示&#xff0c;包括道路、交叉口、车道、交通信号等元素。通过精确的路网建模&#xff0c;可以为交通仿真提供准确的输入数据&#x…

作者头像 李华
网站建设 2026/4/18 5:38:00

Elasticsearch(ES)基础查询语法的使用

1. Match Query (全文检索查询)用于执行全文检索&#xff0c;适合搜索文本字段。 { “query”: { “match”: { “field”: “value” } } }match_phrase&#xff1a;精确匹配短语&#xff0c;适合用于短语搜索。 { “query”: { “match_phrase”: { “field”: “text” } } …

作者头像 李华
网站建设 2026/4/18 5:35:06

docker启动redis简单方法

1、拉取redis镜像 docker pull redis2、在本地某个位置创建以下内容 建议将以下内容放在一起&#xff0c;方便以后管理和查看 # 以/docker/redis为例 mkdir -p /docker/redis mkdir -p /docker/redis/data touch /docker/redis/redis.conf touch /docker/redis/redis.bash3、…

作者头像 李华
网站建设 2026/4/18 5:34:25

微信小程序 PHP_uniapp的大学生兼职推荐系统的设计与实现_ly2blc52

目录微信小程序 PHP_uniapp 大学生兼职推荐系统的设计与实现摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理微信小程序 PHP_uniapp 大学生兼职推荐系统的设计与实现摘要 该系统基于微信小程序平台&#xff0c;采用 PHP 后端和 UniApp 前端框…

作者头像 李华
网站建设 2026/4/18 5:31:42

Docker搭建redis集群

1.使用docker新建6个redis容器实例&#xff0c;在此之前&#xff0c;需要在阿里云服务器和宝塔界面开放安全组(redis客户端连接端口和集群总线端口) redis集群不仅需要开通redis客户端连接的端口(如6381),而且需要开通集群总线端口(16381)。 集群总线端口redis客户端连接的端口…

作者头像 李华
网站建设 2026/4/18 8:05:26

最新爆火6款免费AI论文神器!PaperTan一站式搞定选题降重

紧急预警&#xff1a;论文截止只剩72小时&#xff1f;这些AI工具能救你命&#xff01; 凌晨3点的图书馆、满屏的文献标红、导师催改的第12条消息——如果你正在经历这些&#xff0c;现在就是你最后的急救机会&#xff01;2024年最新爆火的6款免费AI论文工具&#xff0c;能帮你…

作者头像 李华