golang跨平台Material Design原生GUI开发插件fyne的使用

Golang跨平台Material Design原生GUI开发插件Fyne的使用

关于Fyne

Fyne是一个用Go编写的易用UI工具包和应用API。它设计用于构建可在桌面和移动设备上运行的应用程序,使用单一代码库。

先决条件

要使用Fyne开发应用程序,您需要:

  • Go 1.17或更高版本
  • C编译器
  • 系统开发工具

如果不确定是否已安装或不知道如何安装,请查看我们的入门文档。

使用标准Go工具安装Fyne核心库:

go get fyne.io/fyne/v2@latest

导入新模块后,在首次编译代码之前运行以下命令:

go mod tidy

小部件演示

要运行Fyne功能展示,执行以下命令:

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

您将看到类似这样的界面(点击几个按钮后):

Fyne Demo Dark Theme

或者使用浅色主题:

Fyne Demo Light Theme

在移动设备上运行:

Fyne Demo Mobile Light Theme

快速入门

Fyne设计得非常易于编码。如果您已遵循上述先决条件步骤,那么您只需要一个Go IDE(或文本编辑器)。

打开一个新文件,准备编写您的第一个应用程序!

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()
}

运行这个程序:

go run main.go

它看起来像这样:

Fyne Hello Light Theme Fyne Hello Dark Theme

注意:在Windows上首次编译Fyne可能需要长达10分钟,具体取决于您的硬件。后续构建会很快。

移动设备模拟

有一个有用的移动模拟模式,可以提示您的应用程序在移动设备上的工作方式:

go run -tags mobile main.go

另一个选择是使用fyne命令。

安装应用程序

使用go install会将可执行文件复制到您的go bin目录。要将应用程序安装到操作系统的标准应用程序位置,可以使用fyne实用程序和"install"子命令。

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

为移动设备打包

要在移动设备上运行,需要打包应用程序。我们可以使用fyne实用程序的"package"子命令。您需要根据需要添加适当的参数,基本命令如下所示。打包后,您可以使用平台开发工具或fyne的"install"子命令进行安装。

fyne package -os android -appID my.domain.appname
fyne install -os android

构建的Android应用程序可以在真实设备或Android模拟器中运行。然而,为iOS构建略有不同。如果"-os"参数是"ios",则仅为真实的iOS设备构建。将"-os"指定为"iossimulator"允许应用程序在iOS模拟器中运行:

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

准备发布

使用fyne实用程序的"release"子命令,您可以为应用商店和市场打包应用程序。确保您已安装标准构建工具,并按照平台文档设置帐户和签名。然后您可以执行类似以下命令:

fyne release -os ios -certificate "Apple Distribution" -profile "My App Distribution" -appID "com.example.myapp"

上述命令将创建一个’.ipa’文件,然后可以上传到iOS App Store。

文档

更多文档可在Fyne开发者网站pkg.go.dev上找到。

示例

您可以在示例仓库中找到许多示例应用程序。或者,可以在我们的网站上找到使用fyne的应用程序列表。

分发Fyne工具包

所有Fyne应用程序都可以在没有预安装库的情况下工作,这是应用程序如此便携的原因之一。但是,如果您希望在操作系统上更大程度地支持Fyne,则可以安装一些实用程序,以帮助提供更完整的体验。

附加应用程序

建议您安装以下附加应用程序:

应用 go install 描述
fyne_settings fyne.io/fyne/v2/cmd/fyne_settings 用于管理全局Fyne设置(如主题和缩放)的GUI
apps github.com/fyne-io/apps 用于安装Fyne应用商店中列出的Fyne应用的图形安装程序

这些是可选的应用程序,但可以帮助创建更完整的桌面体验。

FyneDesk (Linux / BSD)

要在桌面/笔记本电脑上全面使用Fyne,您还可以安装FyneDesk

FyneDesk screenshopt in dark mode


更多关于golang跨平台Material Design原生GUI开发插件fyne的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang跨平台Material Design原生GUI开发插件fyne的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Fyne - Golang跨平台Material Design原生GUI开发框架

Fyne是一个基于Material Design风格的Go语言跨平台GUI工具包,它允许开发者使用Go语言构建原生界面的桌面和移动应用程序。Fyne的设计目标是简单易用,同时保持高性能和美观的界面。

Fyne核心特性

  1. 跨平台支持:支持Windows、macOS、Linux、Android和iOS
  2. 原生渲染:在每个平台上使用原生图形API渲染
  3. Material Design:遵循Google的Material Design设计规范
  4. 简单API:易于学习和使用的API设计
  5. 内置主题:支持亮色和暗色主题
  6. 丰富的组件:提供按钮、列表、表格、对话框等常见UI组件

安装Fyne

go get fyne.io/fyne/v2

基础示例

下面是一个简单的Fyne应用程序示例:

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("Fyne示例")
	
	// 创建组件
	title := widget.NewLabel("欢迎使用Fyne!")
	button := widget.NewButton("点击我", func() {
		title.SetText("按钮被点击了!")
	})
	
	// 布局组件
	content := container.NewVBox(
		title,
		button,
	)
	
	// 设置窗口内容
	myWindow.SetContent(content)
	
	// 显示窗口并运行应用
	myWindow.ShowAndRun()
}

常用组件

1. 按钮

button := widget.NewButton("点击", func() {
    fmt.Println("按钮被点击")
})

2. 输入框

entry := widget.NewEntry()
entry.SetPlaceHolder("请输入文本...")

3. 标签

label := widget.NewLabel("这是一个标签")

4. 复选框

check := widget.NewCheck("选项", func(checked bool) {
    fmt.Println("复选框状态:", checked)
})

5. 单选按钮

radio := widget.NewRadioGroup([]string{"选项1", "选项2"}, func(selected string) {
    fmt.Println("选择了:", selected)
})

布局管理

Fyne提供了多种布局方式:

1. 垂直布局

content := container.NewVBox(
    widget.NewLabel("第一行"),
    widget.NewLabel("第二行"),
)

2. 水平布局

content := container.NewHBox(
    widget.NewLabel("左"),
    widget.NewLabel("右"),
)

3. 网格布局

content := container.NewGridWithColumns(2,
    widget.NewLabel("左上"), widget.NewLabel("右上"),
    widget.NewLabel("左下"), widget.NewLabel("右下"),
)

主题设置

Fyne支持亮色和暗色主题:

// 设置暗色主题
myApp.Settings().SetTheme(theme.DarkTheme())

// 设置亮色主题
myApp.Settings().SetTheme(theme.LightTheme())

打包应用

Fyne提供了简单的打包工具:

  1. 安装fyne命令行工具:
go install fyne.io/fyne/v2/cmd/fyne@latest
  1. 打包应用:
fyne package -os windows -icon myapp.png

高级示例 - 计算器应用

package main

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

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("计算器")
	
	display := widget.NewEntry()
	display.Disable()
	
	var currentVal float64
	var operation string
	
	// 数字按钮处理函数
	makeNumButton := func(num int) *widget.Button {
		return widget.NewButton(strconv.Itoa(num), func() {
			display.SetText(display.Text + strconv.Itoa(num))
		})
	}
	
	// 操作按钮处理函数
	makeOpButton := func(op string) *widget.Button {
		return widget.NewButton(op, func() {
			val, _ := strconv.ParseFloat(display.Text, 64)
			currentVal = val
			operation = op
			display.SetText("")
		})
	}
	
	// 创建按钮
	buttons := []fyne.CanvasObject{
		makeNumButton(7), makeNumButton(8), makeNumButton(9), makeOpButton("/"),
		makeNumButton(4), makeNumButton(5), makeNumButton(6), makeOpButton("*"),
		makeNumButton(1), makeNumButton(2), makeNumButton(3), makeOpButton("-"),
		widget.NewButton("C", func() { display.SetText("") }),
		makeNumButton(0),
		widget.NewButton("=", func() {
			val, _ := strconv.ParseFloat(display.Text, 64)
			var result float64
			switch operation {
			case "+":
				result = currentVal + val
			case "-":
				result = currentVal - val
			case "*":
				result = currentVal * val
			case "/":
				result = currentVal / val
			}
			display.SetText(strconv.FormatFloat(result, 'f', -1, 64))
		}),
		makeOpButton("+"),
	}
	
	// 创建网格布局
	grid := container.NewGridWithColumns(4, buttons...)
	
	// 组合所有组件
	content := container.NewVBox(
		display,
		grid,
	)
	
	myWindow.SetContent(content)
	myWindow.ShowAndRun()
}

总结

Fyne为Go语言开发者提供了一个简单而强大的GUI开发解决方案,具有以下优势:

  1. 纯Go实现,无需CGO
  2. 跨平台支持良好
  3. 现代化的Material Design界面
  4. 简洁的API设计
  5. 活跃的社区支持

对于需要开发跨平台GUI应用的Go开发者来说,Fyne是一个非常值得考虑的选择。它特别适合中小型应用开发,能够快速构建美观、响应式的用户界面。

回到顶部