Fyne 入门 指南
简介
Fyne是一个使用Go语言开发的跨平台GUI框架,它通过简单的API为开发现代桌面和移动应用提供了强大的工具。利用矢量图形和 Material Design,Fyne旨在构建美观、高性能的应用程序,支持自动缩放以适应不同屏幕尺寸和分辨率。
快速开始
安装教程
Fyne需要3个基本元素:Go工具(至少版本1.12)、一个C编译器(用于与系统图形驱动连接)和一个系统图形驱动。
Mac安装教程
已经安装xcode
- 使用Go模块
- 下载Fyne模块和辅助工具
1 2 3 4
| go mod init MODULE_NAME
go get fyne.io/fyne/v2@latest go install fyne.io/fyne/v2/cmd/fyne@latest
|
创建应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package main
import ( "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/widget" )
func main() { a := app.New() w := a.NewWindow("Hello World")
w.SetContent(widget.NewLabel("Hello World!")) w.ShowAndRun() }
|
应用与主循环
图形用户界面(GUI)应用程序,需要运行一个事件循环(有时被称为运行循环),来处理用户交互和绘图事件。在Fyne中,通过使用App.Run()
或Window.ShowAndRun()
函数启动。这些函数中必须有一个在你的main()
函数代码末尾被调用。
一个应用程序应该只有一个运行循环,在代码中只调用Run()
一次。
一个应用程序可以通过调用App.Quit()
直接退出(移动应用不支持此功能)。一旦所有窗口都被关闭,应用程序也将退出。
在应用程序退出之前,执行Run()
之后的函数将不会被调用。
更新GUI内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package main
import ( "time"
"fyne.io/fyne/v2/app" "fyne.io/fyne/v2/widget" )
func updateTime(clock *widget.Label) { formatted := time.Now().Format("Time: 03:04:05") clock.SetText(formatted) }
func main() { a := app.New() w := a.NewWindow("Clock")
clock := widget.NewLabel("") updateTime(clock)
w.SetContent(clock) go func() { for range time.Tick(time.Second) { updateTime(clock) } }() w.ShowAndRun() }
|
window窗口
窗口是使用App.NewWindow()
创建的,并需要使用Show()
函数来显示。
调用Window.Resize()
方法来设置更大的尺寸。这个方法接受一个fyne.Size
,其中包含使用设备独立像素的宽度和高度。
1
| w.Resize(fyne.NewSize(100, 100))
|
设置一个窗口为“主窗口”,这样如果该窗口关闭,应用程序就会退出。要做到这一点,使用Window
上的SetMaster()
函数。
测试
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package main
import ( "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" )
func SetUI() (*widget.Label, *widget.Entry) { out := widget.NewLabel("hello world") in := widget.NewEntry()
in.OnChanged = func(s string) { out.SetText("hello " + s) } return out, in }
func main() { app := app.New() window := app.NewWindow("test")
window.SetContent(container.NewVBox(SetUI())) window.ShowAndRun() }
|
ui_test.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package main
import ( "fyne.io/fyne/v2/test" "testing" )
func TestSetUI(t *testing.T) { out, in := SetUI()
test.Type(in, "Andy") if out.Text != "hello Andy" { t.Error("Incorrect user greeting") } }
|
打包
“fyne”应用有一个“package”命令可以自动处理这一切。只需指定目标操作系统和任何所需的元数据(如图标),就会生成适当的包。对于.icns或.ico图标转换将自动完成,所以只需提供.png文件 :)。
要在 macOS 上为 Windows 或liunx目标系统构建应用程序,需要进行交叉编译。
设置环境变量
Window
1 2 3
| export GOOS=windows export GOARCH=amd64 export CC=x86_64-w64-mingw32-gcc
|
liunx
1 2
| export GOOS=linux export GOARCH=amd64
|
命令执行
1 2 3 4 5
| fyne package -os darwin -icon myapp.png fyne package -os linux -icon myapp.png fyne package -os windows -icon myapp.png // 安装 fyne install -icon myapp.png
|
从Fyne 2.1开始,使用 元数据文件,为项目设置默认选项。
元数据文件
支持一个元数据文件,允许在仓库中存储有关应用的信息。这个文件是可选的,但可以帮助避免在每个包和发布命令中记住特定的构建参数。
文件应该命名为FyneApp.toml
,位于你运行fyne
命令的目录中(通常是main
包)。
1 2 3 4 5 6 7 8
| Website = "https://example.com"
[Details] Icon = "Icon.png" Name = "My App" ID = "com.example.app" Version = "1.0.0" Build = 1
|
文件的顶部部分是元数据,如果你将你的应用上传到https://apps.fyne.io列表页面时会使用,因此它是可选的。
[Details]部分包含了其他应用商店和操作系统在发布过程中使用的有关应用的数据。
如果找到了这个文件,fyne工具将会使用它,仍然可以使用命令行参数覆盖这些值。