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


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

文章插图
Grid布局
Fyne 的窗口控制十分方便,充分利用了 Go 语言的协程特性,完成了窗口的异步渲染和控制:
package mainimport ( "time" "fyne.io/fyne" "fyne.io/fyne/app" "fyne.io/fyne/widget")func main() { myApp := app.New() myWindow := myApp.NewWindow("Hello") myWindow.SetContent(widget.NewLabel("Hello")) go showAnother(myApp) myWindow.ShowAndRun()}func showAnother(a fyne.App) { time.Sleep(time.Second * 5) win := a.NewWindow("Shown later") win.SetContent(widget.NewLabel("5 seconds later")) win.Resize(fyne.NewSize(200, 200)) win.Show() time.Sleep(time.Second * 2) win.Hide()}在本例中,我们在一个窗口中新建了另一个窗口并进行渲染显示,同时展示了包括控制大小、隐藏关闭等功能 。
Fyne 还支持画布功能,可以在画布上进行自由渲染,实现更为复杂的图形应用:
package mainimport ("fyne.io/fyne""fyne.io/fyne/app""fyne.io/fyne/canvas""fyne.io/fyne/theme""image/color""time")func main() {myApp := app.New()myWindow := myApp.NewWindow("Canvas")myCanvas := myWindow.Canvas()text := canvas.NewText("Text", color.White)text.TextStyle.Bold = truemyCanvas.SetContent(text)go changeContent(myCanvas)myWindow.Resize(fyne.NewSize(100, 100))myWindow.ShowAndRun()}func changeContent(c fyne.Canvas) {time.Sleep(time.Second * 2)c.SetContent(canvas.NewRectangle(color.Black))time.Sleep(time.Second * 2)c.SetContent(canvas.NewLine(color.Gray{0x66}))time.Sleep(time.Second * 2)circle := canvas.NewCircle(color.White)circle.StrokeWidth = 4circle.StrokeColor = color.RGBA{0xff, 0x33, 0x33, 0xff}c.SetContent(circle)time.Sleep(time.Second * 2)c.SetContent(canvas.NewImageFromResource(theme.FyneLogo()))}
Fyne - Go语言的跨平台UI工具包

文章插图
Fyne应用例子
更多Fyne 的打包构建十分简单,安装 Fyne 配套的命令行工具
go get fyne.io/fyne/cmd/fyne对应桌面端的应用,在确定好目标平台后就可以直接打包:
fyne package -os darwin -icon myapp.pngfyne package -os linux -icon myapp.pngfyne package -os windows -icon myapp.png上述命令分别对应 macOS、Linux 和 Windows平台的构建,而 myapp.png 是应用的图标文件 。对于 macOS 平台,生成 app 应用文件;对于 Linux 平台,生成一个 tag.gz 文件,解包后可以放到 use/local/ 中使用;对于 Windows 平台,直接生成 exe 文件,可以直接运行 。
而对于移动端平台,同样十分简单 。在配置好了相应的环境后,运行
fyne package -os android -appID com.example.myapp -icon mobileIcon.pngfyne package -os ios - appID com.example.myapp -icon mobileIcon.png则可以分别构建出 Android 平台的 apk 文件和 iOS 平台的 app 文件 。
Fyne - Go语言的跨平台UI工具包

文章插图
Fyne特性
总结Fyne 作为一个 UI 工具包,依靠 Go 语言的优秀性能,尤其是 goroutine 协程的异步特性,实现了高性能、易开发的图形界面应用 。Fyne 的使用和设计十分现代化,通过简单的命令行就能实现跨平台的开发和构建,安装方便,平台兼容性好 。
Fyne 并未基于现有的 UI 库进行开发,而是直接使用不同平台的图形驱动实现,完成了对跨平台 UI 的抽象,底层代码值得研究 。同时,Fyne 仍处于活跃开发阶段,不少功能仍待实现,有兴趣的开发者可持续关注项目 。

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


推荐阅读