Fyne - Go语言的跨平台UI工具包

各主流的编程语言都有其特有的 UI 库,Go 语言也不甘落后 。如果你不习惯用 Dart 或 JAVAscript 来开发跨平台的 GUI 应用,不妨来看看 Fyne,这个背靠强大易用的Go语言的UI工具库,兼具性能和开发效率,在桌面和移动端都能构建用户友好的应用 。

Fyne - Go语言的跨平台UI工具包

文章插图
Go语言UI库
简介Fyne 是 fyne-io 组织在 Github 上开源的 Go 语言 UI 工具包,项目位于 https://github.com/fyne-io/fyne,目前版本为 v1.3.2 。
Fyne 提供了简单的方式来开发美观、轻量和用户友好的原生应用,拥有大量性能高且方便使用的控件和布局 。Fyne 专注于设计和可用性,控件能够充分满足用户对于交互的期待,并为开发者提供清晰的功能和接口 。Fyne 易于安装,无须为各种复杂的依赖烦恼 。而 Go 语言作为一个日渐流行的服务端语言,其较低的学习门槛和优秀的性能,使得 Fyne 具有更大的推广空间 。目前,Fyne 已经拥有大量的使用案例,广受欢迎 。
Fyne - Go语言的跨平台UI工具包

文章插图
Fyne库 - 为桌面和移动端构建美观应用
安装Fyne 使用 Go 语言开发,需要 Go 1.12 或以上,使用 go get 安装:
go get fyne.io/fyne同时,你还需要一个 C语言编译器来编译平台相关的图形驱动 。对于 windows 平台,Cygwin、TDM-GCC 和 MSYS2(MingW-w64)都可以使用 。在 linux 平台,则需安装对应平台的图形驱动,如在 Ubuntu / Debian 中可以使用命令
sudo apt-get install golang gcc libgl1-mesa-dev xorg-dev想要开发 Android 应用,则需要安装 Android SDK 和 Android NDK 。而想要挨罚 macOS 或 IOS 应用,则需要 Xcode 进行开发 。
示例Fyne 提供了使用函数 。或是使用结构体这两套不同的接口风格,可以根据个人的编码喜好选择 。我们来看 Fyne 的 Hello World 例子:
package mainimport ("fyne.io/fyne/App""fyne.io/fyne/widget")func main() {a := app.New()w := a.NewWindow("Hello")hello := widget.NewLabel("Hello Fyne!")w.SetContent(widget.NewVBox(hello,widget.NewButton("Hi!", func() {hello.SetText("Welcome :)")}),))w.ShowAndRun()}代码十分简洁明了 。首先,通过 app.New() 创建一个应用实例,并新建一个标题为 Hello 的窗口 。然后,使用 widget.NewLabel 来创建一个便签,并在窗口设置 垂直方向排列的vbox 布局,首先放置标签,然后再放置一个新建的按钮 。按钮注册了一个点击事件的回调函数,在点击按钮时会把标签的文本更改为 Welcome 。最后,运行并显示窗口 。
直接运行代码:
go run hello.go就会出现一个新的窗口,并显示带有一个标签和一个按钮的界面:
Fyne - Go语言的跨平台UI工具包

文章插图
Fyne的Hello例子
默认的主题是暗色调风格的,如果想要配置为明亮色调的主题,可以设置环境变量
FYNE_THEME=light就能得到一个明亮色调主题的界面:
Fyne - Go语言的跨平台UI工具包

文章插图
Fyne明亮色调例子
在上面的代码中,我们可以看到,控件的创建都是使用 New 之类的函数实现 。Fyne 也提供了使用结构体的方式进行控件的创建,
package mainimport ( "fyne.io/fyne" "fyne.io/fyne/app" "fyne.io/fyne/widget")func main() { a := app.New() w := a.NewWindow("Hello") w.SetContent(&widget.Box{Children: []fyne.CanvasObject{&widget.Label{Text: "Hello Fyne!"},&widget.Button{Text: "Quit", OnTapped: func() {a.Quit()}}, }}) w.ShowAndRun()}在一些情况下,结构体方式的风格可能更为清晰,可自行选择 。
Fyne 控件丰富,包括基本的按钮、输入框、表单、图标、进度条、选择框等 。
package mainimport ("log""fyne.io/fyne/app""fyne.io/fyne/widget")func main() {myApp := app.New()myWindow := myApp.NewWindow("Form Widget")entry := widget.NewEntry()textArea := widget.NewMultiLineEntry()form := &widget.Form{Items: []*widget.FormItem{{"Entry", entry}},OnSubmit: func() {log.Println("Form submitted:", entry.Text)log.Println("multiline:", textArea.Text)myWindow.Close()},}form.Append("Text", textArea)myWindow.SetContent(form)myWindow.ShowAndRun()}
Fyne - Go语言的跨平台UI工具包

文章插图
Fyne表单
Fyne 使用布局来控制控件的排列方式,包括 HBox(水平方向单行排列)、VBox(垂直方向单列排列)、Center(居中)、Grid(网格)、GridWrap(自适应的网格)、Border(各边外的剩余空间)和 Max(最大填充) 。


推荐阅读